mirror of https://github.com/apache/jclouds.git
Issue 100: get and metadata support
git-svn-id: http://jclouds.googlecode.com/svn/trunk@1971 3d8758e0-26b5-11de-8745-db77d3ebf521
This commit is contained in:
parent
9c3dcdf495
commit
99cc328996
|
@ -51,7 +51,7 @@ public interface SDNAuthentication {
|
|||
|
||||
@GET
|
||||
@ResponseParser(ParseSessionTokenFromJsonResponse.class)
|
||||
@Path("/Authentication/Login.ashx")
|
||||
@Path("/ws/Authentication/Login.ashx")
|
||||
String authenticate(@QueryParam(SDNQueryParams.APPKEY) String appKey,
|
||||
@QueryParam(SDNQueryParams.USERNAME) String user,
|
||||
@QueryParam(SDNQueryParams.PASSWORD) String password);
|
||||
|
|
|
@ -39,10 +39,12 @@ import org.jclouds.blobstore.domain.BlobMetadata;
|
|||
import org.jclouds.nirvanix.sdn.binders.BindMetadataToQueryParams;
|
||||
import org.jclouds.nirvanix.sdn.domain.UploadInfo;
|
||||
import org.jclouds.nirvanix.sdn.filters.AddSessionTokenToRequest;
|
||||
import org.jclouds.nirvanix.sdn.filters.InsertUserContextIntoPath;
|
||||
import org.jclouds.nirvanix.sdn.functions.ParseUploadInfoFromJsonResponse;
|
||||
import org.jclouds.nirvanix.sdn.reference.SDNQueryParams;
|
||||
import org.jclouds.rest.annotations.BinderParam;
|
||||
import org.jclouds.rest.annotations.Endpoint;
|
||||
import org.jclouds.rest.annotations.OverrideRequestFilters;
|
||||
import org.jclouds.rest.annotations.QueryParams;
|
||||
import org.jclouds.rest.annotations.RequestFilters;
|
||||
import org.jclouds.rest.annotations.ResponseParser;
|
||||
|
@ -58,9 +60,9 @@ import com.google.common.collect.Multimap;
|
|||
* @author Adrian Cole
|
||||
*/
|
||||
@Endpoint(SDN.class)
|
||||
@QueryParams(keys = SDNQueryParams.OUTPUT, values = "json")
|
||||
@RequestFilters(AddSessionTokenToRequest.class)
|
||||
@SkipEncoding( { '/', ':' })
|
||||
@QueryParams(keys = SDNQueryParams.OUTPUT, values = "json")
|
||||
public interface SDNConnection {
|
||||
|
||||
/**
|
||||
|
@ -68,7 +70,7 @@ public interface SDNConnection {
|
|||
* to. It returns the host to upload to and an Upload Token that will be used to authenticate.
|
||||
*/
|
||||
@GET
|
||||
@Path("/IMFS/GetStorageNode.ashx")
|
||||
@Path("/ws/IMFS/GetStorageNode.ashx")
|
||||
@ResponseParser(ParseUploadInfoFromJsonResponse.class)
|
||||
UploadInfo getStorageNode(@QueryParam(SDNQueryParams.DESTFOLDERPATH) String folderPath,
|
||||
@QueryParam(SDNQueryParams.SIZEBYTES) long size);
|
||||
|
@ -84,7 +86,7 @@ public interface SDNConnection {
|
|||
* The SetMetadata method is used to set specified metadata for a file or folder.
|
||||
*/
|
||||
@PUT
|
||||
@Path("/Metadata/SetMetadata.ashx")
|
||||
@Path("/ws/Metadata/SetMetadata.ashx")
|
||||
@QueryParams(keys = SDNQueryParams.PATH, values = "{path}")
|
||||
Future<Void> setMetadata(@PathParam("path") String path,
|
||||
@BinderParam(BindMetadataToQueryParams.class) Multimap<String, String> metadata);
|
||||
|
@ -93,7 +95,17 @@ public interface SDNConnection {
|
|||
* The GetMetadata method is used to retrieve all metadata from a file or folder.
|
||||
*/
|
||||
@GET
|
||||
@Path("/Metadata/GetMetadata.ashx")
|
||||
@Path("/ws/Metadata/GetMetadata.ashx")
|
||||
@QueryParams(keys = SDNQueryParams.PATH, values = "{path}")
|
||||
Future<String> getMetadata(@PathParam("path") String path);
|
||||
|
||||
/**
|
||||
* Get the contents of a file
|
||||
*/
|
||||
@GET
|
||||
@Path("/{path}")
|
||||
@OverrideRequestFilters
|
||||
@RequestFilters(InsertUserContextIntoPath.class)
|
||||
Future<String> getFile(@PathParam("path") String path);
|
||||
|
||||
}
|
||||
|
|
|
@ -45,9 +45,14 @@ import com.google.inject.TypeLiteral;
|
|||
*/
|
||||
public class SDNContextBuilder extends CloudContextBuilder<SDNConnection> {
|
||||
|
||||
public SDNContextBuilder(String apikey, String id, String secret) {
|
||||
public SDNContextBuilder(String apikey, String appname, String password) {
|
||||
this(new Properties());
|
||||
authenticate(this, apikey, id, secret);
|
||||
authenticate(this, apikey, appname, appname, password);
|
||||
}
|
||||
|
||||
public SDNContextBuilder(String apikey, String appname, String username, String password) {
|
||||
this(new Properties());
|
||||
authenticate(this, apikey, appname, username, password);
|
||||
}
|
||||
|
||||
public SDNContextBuilder(Properties props) {
|
||||
|
@ -61,19 +66,21 @@ public class SDNContextBuilder extends CloudContextBuilder<SDNConnection> {
|
|||
addAuthenticationModule(this);
|
||||
}
|
||||
|
||||
public static void authenticate(SDNContextBuilder builder, String appkey, String id,
|
||||
String secret) {
|
||||
public static void authenticate(SDNContextBuilder builder, String appkey, String appname,
|
||||
String username, String password) {
|
||||
builder.getProperties().setProperty(SDNConstants.PROPERTY_SDN_APPKEY,
|
||||
checkNotNull(appkey, "appkey"));
|
||||
builder.getProperties().setProperty(SDNConstants.PROPERTY_SDN_APPNAME,
|
||||
checkNotNull(appname, "appname"));
|
||||
builder.getProperties().setProperty(SDNConstants.PROPERTY_SDN_USERNAME,
|
||||
checkNotNull(id, "user"));
|
||||
checkNotNull(username, "username"));
|
||||
builder.getProperties().setProperty(SDNConstants.PROPERTY_SDN_PASSWORD,
|
||||
checkNotNull(secret, "key"));
|
||||
checkNotNull(password, "password"));
|
||||
}
|
||||
|
||||
public static void initialize(SDNContextBuilder builder) {
|
||||
builder.getProperties().setProperty(SDNConstants.PROPERTY_SDN_ENDPOINT,
|
||||
"http://services.nirvanix.com/ws");
|
||||
"http://services.nirvanix.com");
|
||||
}
|
||||
|
||||
public static void addAuthenticationModule(SDNContextBuilder builder) {
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
package org.jclouds.nirvanix.sdn.filters;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.http.HttpException;
|
||||
import org.jclouds.http.HttpRequest;
|
||||
import org.jclouds.http.HttpRequestFilter;
|
||||
import org.jclouds.nirvanix.sdn.reference.SDNConstants;
|
||||
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
||||
|
||||
/**
|
||||
* Adds the Session Token to the request. This will update the Session Token before 20 minutes is
|
||||
* up.
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*
|
||||
*/
|
||||
@Singleton
|
||||
public class InsertUserContextIntoPath implements HttpRequestFilter {
|
||||
|
||||
private final AddSessionTokenToRequest sessionManager;
|
||||
private final String pathPrefix;
|
||||
|
||||
@Inject
|
||||
public InsertUserContextIntoPath(AddSessionTokenToRequest sessionManager,
|
||||
@Named(SDNConstants.PROPERTY_SDN_APPNAME) String appname,
|
||||
@Named(SDNConstants.PROPERTY_SDN_USERNAME) String username) {
|
||||
this.sessionManager = sessionManager;
|
||||
this.pathPrefix = String.format("/%s/%s/", appname, username);
|
||||
}
|
||||
|
||||
public void filter(HttpRequest request) throws HttpException {
|
||||
checkArgument(checkNotNull(request, "input") instanceof GeneratedHttpRequest<?>,
|
||||
"this decorator is only valid for GeneratedHttpRequests!");
|
||||
String sessionToken = sessionManager.getSessionToken();
|
||||
int prefixIndex = request.getEndpoint().getPath().indexOf(pathPrefix);
|
||||
String path;
|
||||
if (prefixIndex == -1) { // addToken
|
||||
path = "/" + sessionToken + pathPrefix + request.getEndpoint().getPath().substring(1);
|
||||
} else { // replace token
|
||||
path = "/" + sessionToken + request.getEndpoint().getPath().substring(prefixIndex);
|
||||
}
|
||||
((GeneratedHttpRequest<?>) request).replacePath(path);
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.nirvanix.sdn.functions;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.jclouds.http.functions.ParseJson;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.gson.Gson;
|
||||
|
||||
/**
|
||||
* This parses a Map of Metadata from a Nirvanix response
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
public class ParseMetadataFromJsonResponse extends ParseJson<Map<String, String>> {
|
||||
|
||||
@Inject
|
||||
public ParseMetadataFromJsonResponse(Gson gson) {
|
||||
super(gson);
|
||||
}
|
||||
|
||||
private static class SessionTokenResponse {
|
||||
Integer ResponseCode;
|
||||
List<Map<String, String>> Metadata;
|
||||
}
|
||||
|
||||
public Map<String, String> apply(InputStream stream) {
|
||||
|
||||
try {
|
||||
SessionTokenResponse response = gson.fromJson(new InputStreamReader(stream, "UTF-8"),
|
||||
SessionTokenResponse.class);
|
||||
if (response.ResponseCode == null || response.ResponseCode != 0)
|
||||
throw new RuntimeException("bad response code: " + response.ResponseCode);
|
||||
Map<String, String> metadata = Maps.newHashMap();
|
||||
for (Map<String, String> keyValue : response.Metadata) {
|
||||
metadata.put(keyValue.get("Type"), keyValue.get("Value"));
|
||||
}
|
||||
return metadata;
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
throw new RuntimeException("jclouds requires UTF-8 encoding", e);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -33,4 +33,5 @@ public interface SDNConstants {
|
|||
public static final String PROPERTY_SDN_USERNAME = "jclouds.nirvanix.sdn.username";
|
||||
public static final String PROPERTY_SDN_PASSWORD = "jclouds.nirvanix.sdn.password";
|
||||
public static final String PROPERTY_SDN_APPKEY = "jclouds.nirvanix.sdn.appkey";
|
||||
public static final String PROPERTY_SDN_APPNAME = "jclouds.nirvanix.sdn.appname";
|
||||
}
|
||||
|
|
|
@ -51,7 +51,8 @@ import com.google.inject.Provides;
|
|||
*/
|
||||
@Test(groups = "live", testName = "sdn.SDNAuthenticationLiveTest")
|
||||
public class SDNAuthenticationLiveTest {
|
||||
String app = checkNotNull(System.getProperty("jclouds.test.app"), "jclouds.test.app");
|
||||
String appname = checkNotNull(System.getProperty("jclouds.test.appname"), "jclouds.test.appname");
|
||||
String appid = checkNotNull(System.getProperty("jclouds.test.appid"), "jclouds.test.appid");
|
||||
String user = checkNotNull(System.getProperty("jclouds.test.user"), "jclouds.test.user");
|
||||
String password = checkNotNull(System.getProperty("jclouds.test.key"), "jclouds.test.key");
|
||||
|
||||
|
@ -60,7 +61,7 @@ public class SDNAuthenticationLiveTest {
|
|||
@Test
|
||||
public void testAuthentication() throws Exception {
|
||||
SDNAuthentication authentication = injector.getInstance(SDNAuthentication.class);
|
||||
String response = authentication.authenticate(app, user, password);
|
||||
String response = authentication.authenticate(appid, user, password);
|
||||
assertNotNull(response);
|
||||
}
|
||||
|
||||
|
@ -70,7 +71,7 @@ public class SDNAuthenticationLiveTest {
|
|||
@Override
|
||||
protected void configure() {
|
||||
bind(URI.class).annotatedWith(SDN.class).toInstance(
|
||||
URI.create("http://services.nirvanix.com/ws"));
|
||||
URI.create("http://services.nirvanix.com"));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
|
|
|
@ -64,7 +64,7 @@ public class SDNAuthenticationTest {
|
|||
HttpRequest httpMethod = processor.createRequest(method,
|
||||
new Object[] { "apple", "foo", "bar" });
|
||||
assertEquals(httpMethod.getEndpoint().getHost(), "localhost");
|
||||
assertEquals(httpMethod.getEndpoint().getPath(), "/Authentication/Login.ashx");
|
||||
assertEquals(httpMethod.getEndpoint().getPath(), "/ws/Authentication/Login.ashx");
|
||||
assertEquals(httpMethod.getEndpoint().getQuery(),
|
||||
"output=json&password=bar&username=foo&appKey=apple");
|
||||
assertEquals(httpMethod.getMethod(), HttpMethod.GET);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package org.jclouds.nirvanix.sdn;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static org.testng.Assert.assertNotNull;
|
||||
import static org.testng.Assert.*;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
@ -16,9 +16,6 @@ import org.jclouds.nirvanix.sdn.domain.UploadInfo;
|
|||
import org.testng.annotations.BeforeGroups;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.ImmutableMultimap;
|
||||
import com.google.common.collect.Multimap;
|
||||
|
||||
/**
|
||||
* Tests behavior of {@code SDNConnection}
|
||||
*
|
||||
|
@ -35,12 +32,14 @@ public class SDNConnectionLiveTest {
|
|||
|
||||
@BeforeGroups(groups = { "live" })
|
||||
public void setupConnection() {
|
||||
String app = checkNotNull(System.getProperty("jclouds.test.app"), "jclouds.test.app");
|
||||
String appname = checkNotNull(System.getProperty("jclouds.test.appname"),
|
||||
"jclouds.test.appname");
|
||||
String appid = checkNotNull(System.getProperty("jclouds.test.appid"), "jclouds.test.appid");
|
||||
String user = checkNotNull(System.getProperty("jclouds.test.user"), "jclouds.test.user");
|
||||
String password = checkNotNull(System.getProperty("jclouds.test.key"), "jclouds.test.key");
|
||||
|
||||
connection = new SDNContextBuilder(app, user, password).withModules(new Log4JLoggingModule())
|
||||
.buildContext().getApi();
|
||||
connection = new SDNContextBuilder(appid, appname, user, password).withModules(
|
||||
new Log4JLoggingModule()).buildContext().getApi();
|
||||
}
|
||||
|
||||
public void testUploadToken() throws InterruptedException, ExecutionException, TimeoutException {
|
||||
|
@ -51,16 +50,17 @@ public class SDNConnectionLiveTest {
|
|||
assertNotNull(uploadInfo.getToken());
|
||||
|
||||
connection.upload(uploadInfo.getHost(), uploadInfo.getToken(), containerName,
|
||||
new Blob<BlobMetadata>("key", "value")).get(30, TimeUnit.SECONDS);
|
||||
new Blob<BlobMetadata>("test.txt", "value")).get(30, TimeUnit.SECONDS);
|
||||
|
||||
|
||||
String metadataS = connection.getMetadata(containerName).get(30, TimeUnit.SECONDS);
|
||||
System.err.println(metadataS);
|
||||
|
||||
Multimap<String, String> metadata = ImmutableMultimap.of("chef", "sushi", "foo", "bar");
|
||||
connection.setMetadata(containerName, metadata).get(30, TimeUnit.SECONDS);
|
||||
metadataS = connection.getMetadata(containerName).get(30, TimeUnit.SECONDS);
|
||||
String metadataS = connection.getMetadata(containerName + "/test.txt").get(30,
|
||||
TimeUnit.SECONDS);
|
||||
System.err.println(metadataS);
|
||||
|
||||
String content = connection.getFile(containerName + "/test.txt").get(30, TimeUnit.SECONDS);
|
||||
assertEquals(content, "value");
|
||||
|
||||
// Multimap<String, String> metadata = ImmutableMultimap.of("chef", "sushi", "foo", "bar");
|
||||
// connection.setMetadata(containerName+"/test.txt", metadata).get(30, TimeUnit.SECONDS);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,10 +44,14 @@ import org.jclouds.http.functions.ReturnStringIf200;
|
|||
import org.jclouds.http.functions.ReturnVoidIf2xx;
|
||||
import org.jclouds.logging.Logger;
|
||||
import org.jclouds.logging.Logger.LoggerFactory;
|
||||
import org.jclouds.nirvanix.sdn.filters.AddSessionTokenToRequest;
|
||||
import org.jclouds.nirvanix.sdn.filters.InsertUserContextIntoPath;
|
||||
import org.jclouds.nirvanix.sdn.functions.ParseUploadInfoFromJsonResponse;
|
||||
import org.jclouds.nirvanix.sdn.reference.SDNConstants;
|
||||
import org.jclouds.rest.config.RestModule;
|
||||
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
||||
import org.jclouds.rest.internal.RestAnnotationProcessor;
|
||||
import org.jclouds.util.Jsr330;
|
||||
import org.jclouds.util.Utils;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
@ -76,13 +80,15 @@ public class SDNConnectionTest {
|
|||
GeneratedHttpRequest<?> httpMethod = processor.createRequest(method, new Object[] {
|
||||
"adriansmovies", 734859264 });
|
||||
assertEquals(httpMethod.getEndpoint().getHost(), "localhost");
|
||||
assertEquals(httpMethod.getEndpoint().getPath(), "/IMFS/GetStorageNode.ashx");
|
||||
assertEquals(httpMethod.getEndpoint().getPath(), "/ws/IMFS/GetStorageNode.ashx");
|
||||
assertEquals(httpMethod.getEndpoint().getQuery(),
|
||||
"output=json&sizeBytes=734859264&destFolderPath=adriansmovies");
|
||||
assertEquals(httpMethod.getMethod(), HttpMethod.GET);
|
||||
assertEquals(httpMethod.getHeaders().size(), 0);
|
||||
assertEquals(RestAnnotationProcessor.getParserOrThrowException(method),
|
||||
ParseUploadInfoFromJsonResponse.class);
|
||||
assertEquals(httpMethod.getFilters().size(), 1);
|
||||
assertEquals(httpMethod.getFilters().get(0).getClass(), AddSessionTokenToRequest.class);
|
||||
}
|
||||
|
||||
public void testUpload() throws SecurityException, NoSuchMethodException, IOException {
|
||||
|
@ -106,6 +112,8 @@ public class SDNConnectionTest {
|
|||
BindBlobToMultipartFormTest.EXPECTS);
|
||||
assertEquals(processor.createResponseParser(method, httpMethod).getClass(),
|
||||
ReturnVoidIf2xx.class);
|
||||
assertEquals(httpMethod.getFilters().size(), 1);
|
||||
assertEquals(httpMethod.getFilters().get(0).getClass(), AddSessionTokenToRequest.class);
|
||||
}
|
||||
|
||||
public void testSetMetadata() throws SecurityException, NoSuchMethodException, IOException {
|
||||
|
@ -114,7 +122,7 @@ public class SDNConnectionTest {
|
|||
.createRequest(method, new Object[] { "adriansmovies/sushi.avi",
|
||||
ImmutableMultimap.of("Chef", "Kawasaki") });
|
||||
assertEquals(httpMethod.getEndpoint().getHost(), "localhost");
|
||||
assertEquals(httpMethod.getEndpoint().getPath(), "/Metadata/SetMetadata.ashx");
|
||||
assertEquals(httpMethod.getEndpoint().getPath(), "/ws/Metadata/SetMetadata.ashx");
|
||||
assertEquals(httpMethod.getEndpoint().getQuery(),
|
||||
"output=json&path=adriansmovies/sushi.avi&metadata=chef:Kawasaki");
|
||||
assertEquals(httpMethod.getMethod(), HttpMethod.PUT);
|
||||
|
@ -124,6 +132,8 @@ public class SDNConnectionTest {
|
|||
assertEquals(httpMethod.getEntity(), null);
|
||||
assertEquals(processor.createResponseParser(method, httpMethod).getClass(),
|
||||
ReturnVoidIf2xx.class);
|
||||
assertEquals(httpMethod.getFilters().size(), 1);
|
||||
assertEquals(httpMethod.getFilters().get(0).getClass(), AddSessionTokenToRequest.class);
|
||||
}
|
||||
|
||||
public void testGetMetadata() throws SecurityException, NoSuchMethodException, IOException {
|
||||
|
@ -131,13 +141,31 @@ public class SDNConnectionTest {
|
|||
GeneratedHttpRequest<SDNConnection> httpMethod = processor.createRequest(method,
|
||||
new Object[] { "adriansmovies/sushi.avi" });
|
||||
assertEquals(httpMethod.getEndpoint().getHost(), "localhost");
|
||||
assertEquals(httpMethod.getEndpoint().getPath(), "/Metadata/GetMetadata.ashx");
|
||||
assertEquals(httpMethod.getEndpoint().getPath(), "/ws/Metadata/GetMetadata.ashx");
|
||||
assertEquals(httpMethod.getEndpoint().getQuery(), "output=json&path=adriansmovies/sushi.avi");
|
||||
assertEquals(httpMethod.getMethod(), HttpMethod.GET);
|
||||
assertEquals(httpMethod.getHeaders().size(), 0);
|
||||
assertEquals(httpMethod.getEntity(), null);
|
||||
assertEquals(processor.createResponseParser(method, httpMethod).getClass(),
|
||||
ReturnStringIf200.class);
|
||||
assertEquals(httpMethod.getFilters().size(), 1);
|
||||
assertEquals(httpMethod.getFilters().get(0).getClass(), AddSessionTokenToRequest.class);
|
||||
}
|
||||
|
||||
public void testGetFile() throws SecurityException, NoSuchMethodException, IOException {
|
||||
Method method = SDNConnection.class.getMethod("getFile", String.class);
|
||||
GeneratedHttpRequest<SDNConnection> httpMethod = processor.createRequest(method,
|
||||
new Object[] { "adriansmovies/sushi.avi" });
|
||||
assertEquals(httpMethod.getEndpoint().getHost(), "localhost");
|
||||
assertEquals(httpMethod.getEndpoint().getPath(), "/adriansmovies/sushi.avi");
|
||||
assertEquals(httpMethod.getEndpoint().getQuery(), "output=json");
|
||||
assertEquals(httpMethod.getMethod(), HttpMethod.GET);
|
||||
assertEquals(httpMethod.getHeaders().size(), 0);
|
||||
assertEquals(httpMethod.getEntity(), null);
|
||||
assertEquals(processor.createResponseParser(method, httpMethod).getClass(),
|
||||
ReturnStringIf200.class);
|
||||
assertEquals(httpMethod.getFilters().size(), 1);
|
||||
assertEquals(httpMethod.getFilters().get(0).getClass(), InsertUserContextIntoPath.class);
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
|
@ -152,6 +180,12 @@ public class SDNConnectionTest {
|
|||
return Logger.NULL;
|
||||
}
|
||||
});
|
||||
bindConstant().annotatedWith(Jsr330.named(SDNConstants.PROPERTY_SDN_APPKEY)).to(
|
||||
"appKey");
|
||||
bindConstant().annotatedWith(Jsr330.named(SDNConstants.PROPERTY_SDN_APPNAME)).to(
|
||||
"appname");
|
||||
bindConstant().annotatedWith(Jsr330.named(SDNConstants.PROPERTY_SDN_USERNAME)).to(
|
||||
"username");
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
|
|
|
@ -0,0 +1,130 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.nirvanix.sdn.filters;
|
||||
|
||||
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.lang.reflect.Method;
|
||||
import java.net.URI;
|
||||
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.ext.RuntimeDelegate;
|
||||
|
||||
import org.jclouds.concurrent.WithinThreadExecutorService;
|
||||
import org.jclouds.concurrent.config.ExecutorServiceModule;
|
||||
import org.jclouds.http.config.JavaUrlHttpCommandExecutorServiceModule;
|
||||
import org.jclouds.logging.Logger;
|
||||
import org.jclouds.logging.Logger.LoggerFactory;
|
||||
import org.jclouds.nirvanix.sdn.reference.SDNConstants;
|
||||
import org.jclouds.rest.annotations.Endpoint;
|
||||
import org.jclouds.rest.config.RestModule;
|
||||
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
||||
import org.jclouds.rest.internal.RestAnnotationProcessor;
|
||||
import org.jclouds.rest.internal.RuntimeDelegateImpl;
|
||||
import org.jclouds.util.Jsr330;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Key;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
@Test(groups = "unit", sequential = true, testName = "sdn.InsertUserContextIntoPathTest")
|
||||
// sequential as easymock isn't threadsafe
|
||||
public class InsertUserContextIntoPathTest {
|
||||
|
||||
private Injector injector;
|
||||
private InsertUserContextIntoPath filter;
|
||||
private RestAnnotationProcessor<TestService> factory;
|
||||
private Method method;
|
||||
|
||||
private static interface TestService {
|
||||
@POST
|
||||
public void foo(@Endpoint URI endpoint);
|
||||
}
|
||||
|
||||
public void testRequestInvalid() {
|
||||
GeneratedHttpRequest<TestService> request = factory.createRequest(method, URI
|
||||
.create("https://host/path"));
|
||||
filter.filter(request);
|
||||
filter.filter(request);
|
||||
assertEquals(request.getEndpoint().getPath(), "/token/appname/username/path");
|
||||
assertEquals(request.getEndpoint().getHost(), "host");
|
||||
}
|
||||
|
||||
public void testRequestNoSession() {
|
||||
GeneratedHttpRequest<TestService> request = factory.createRequest(method, URI
|
||||
.create("https://host/path"));
|
||||
filter.filter(request);
|
||||
assertEquals(request.getEndpoint().getPath(), "/token/appname/username/path");
|
||||
assertEquals(request.getEndpoint().getHost(), "host");
|
||||
}
|
||||
|
||||
public void testRequestAlreadyHasSession() {
|
||||
GeneratedHttpRequest<TestService> request = factory.createRequest(method, URI
|
||||
.create("https://host/token/appname/username/path"));
|
||||
filter.filter(request);
|
||||
assertEquals(request.getEndpoint().getPath(), "/token/appname/username/path");
|
||||
assertEquals(request.getEndpoint().getHost(), "host");
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
protected void createFilter() throws SecurityException, NoSuchMethodException {
|
||||
injector = Guice.createInjector(new RestModule(), new ExecutorServiceModule(
|
||||
new WithinThreadExecutorService()), new JavaUrlHttpCommandExecutorServiceModule(),
|
||||
new AbstractModule() {
|
||||
|
||||
protected void configure() {
|
||||
RuntimeDelegate.setInstance(new RuntimeDelegateImpl());
|
||||
bind(Logger.LoggerFactory.class).toInstance(new LoggerFactory() {
|
||||
public Logger getLogger(String category) {
|
||||
return Logger.NULL;
|
||||
}
|
||||
});
|
||||
AddSessionTokenToRequest sessionManager = createMock(AddSessionTokenToRequest.class);
|
||||
expect(sessionManager.getSessionToken()).andReturn("token").anyTimes();
|
||||
replay(sessionManager);
|
||||
bind(AddSessionTokenToRequest.class).toInstance(sessionManager);
|
||||
bindConstant().annotatedWith(Jsr330.named(SDNConstants.PROPERTY_SDN_APPKEY))
|
||||
.to("appKey");
|
||||
bindConstant().annotatedWith(Jsr330.named(SDNConstants.PROPERTY_SDN_USERNAME))
|
||||
.to("username");
|
||||
bindConstant().annotatedWith(Jsr330.named(SDNConstants.PROPERTY_SDN_APPNAME))
|
||||
.to("appname");
|
||||
}
|
||||
|
||||
});
|
||||
filter = injector.getInstance(InsertUserContextIntoPath.class);
|
||||
factory = injector.getInstance(Key
|
||||
.get(new TypeLiteral<RestAnnotationProcessor<TestService>>() {
|
||||
}));
|
||||
method = TestService.class.getMethod("foo", URI.class);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.nirvanix.sdn.functions;
|
||||
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.Map;
|
||||
|
||||
import org.jclouds.http.functions.config.ParserModule;
|
||||
import org.jclouds.util.DateService;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
|
||||
/**
|
||||
* Tests behavior of {@code ParseMetadataFromJsonResponse}
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Test(groups = "unit", testName = "sdn.ParseMetadataFromJsonResponseTest")
|
||||
public class ParseMetadataFromJsonResponseTest {
|
||||
|
||||
Injector i = Guice.createInjector(new ParserModule());
|
||||
DateService dateService = new DateService();
|
||||
|
||||
public void testApplyInputStreamDetails() throws UnknownHostException {
|
||||
InputStream is = getClass().getResourceAsStream("/metadata.json");
|
||||
|
||||
ParseMetadataFromJsonResponse parser = new ParseMetadataFromJsonResponse(i
|
||||
.getInstance(Gson.class));
|
||||
Map<String, String> response = parser.apply(is);
|
||||
assertEquals(response, ImmutableMap.of("MD5","IGPBYI1uC6+AJJxC4r5YBA==","test","1"));
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
{"ResponseCode":0,"Metadata":[{"Type":"MD5","Value":"IGPBYI1uC6+AJJxC4r5YBA=="},{"Type":"test","Value":"1"}]}
|
|
@ -42,7 +42,8 @@
|
|||
<jclouds.test.initializer>org.jclouds.nirvanix.sdn.integration.SDNTestInitializer</jclouds.test.initializer>
|
||||
<jclouds.test.user>${jclouds.nirvanix.sdn.username}</jclouds.test.user>
|
||||
<jclouds.test.key>${jclouds.nirvanix.sdn.password}</jclouds.test.key>
|
||||
<jclouds.test.app>${jclouds.nirvanix.sdn.appkey}</jclouds.test.app>
|
||||
<jclouds.test.appname>${jclouds.nirvanix.sdn.appname}</jclouds.test.appname>
|
||||
<jclouds.test.appid>${jclouds.nirvanix.sdn.appkey}</jclouds.test.appid>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
|
|
Loading…
Reference in New Issue