mirror of https://github.com/apache/jclouds.git
Merge branch 'master' of git://github.com/jclouds/jclouds into large-blob
This commit is contained in:
commit
3167e77a14
|
@ -154,6 +154,9 @@ swift.propertiesbuilder=org.jclouds.openstack.swift.SwiftPropertiesBuilder
|
||||||
cloudstack.contextbuilder=org.jclouds.cloudstack.CloudStackContextBuilder
|
cloudstack.contextbuilder=org.jclouds.cloudstack.CloudStackContextBuilder
|
||||||
cloudstack.propertiesbuilder=org.jclouds.cloudstack.CloudStackPropertiesBuilder
|
cloudstack.propertiesbuilder=org.jclouds.cloudstack.CloudStackPropertiesBuilder
|
||||||
|
|
||||||
|
softlayer.contextbuilder=org.jclouds.softlayer.SoftLayerContextBuilder
|
||||||
|
softlayer.propertiesbuilder=org.jclouds.softlayer.SoftLayerPropertiesBuilder
|
||||||
|
|
||||||
cloudfiles-us.contextbuilder=org.jclouds.cloudfiles.CloudFilesContextBuilder
|
cloudfiles-us.contextbuilder=org.jclouds.cloudfiles.CloudFilesContextBuilder
|
||||||
cloudfiles-us.propertiesbuilder=org.jclouds.rackspace.cloudfiles.CloudFilesUSPropertiesBuilder
|
cloudfiles-us.propertiesbuilder=org.jclouds.rackspace.cloudfiles.CloudFilesUSPropertiesBuilder
|
||||||
|
|
||||||
|
|
|
@ -116,7 +116,7 @@ public class AWSEC2TemplateBuilderLiveTest extends BaseTemplateBuilderLiveTest {
|
||||||
|
|
||||||
Template defaultTemplate = context.getComputeService().templateBuilder().build();
|
Template defaultTemplate = context.getComputeService().templateBuilder().build();
|
||||||
assert (defaultTemplate.getImage().getProviderId().startsWith("ami-")) : defaultTemplate;
|
assert (defaultTemplate.getImage().getProviderId().startsWith("ami-")) : defaultTemplate;
|
||||||
assertEquals(defaultTemplate.getImage().getOperatingSystem().getVersion(), "2010.11.1-beta");
|
assertEquals(defaultTemplate.getImage().getOperatingSystem().getVersion(), "2011.02.1");
|
||||||
assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true);
|
assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true);
|
||||||
assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.AMZN_LINUX);
|
assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.AMZN_LINUX);
|
||||||
assertEquals(defaultTemplate.getImage().getUserMetadata().get("rootDeviceType"), "ebs");
|
assertEquals(defaultTemplate.getImage().getUserMetadata().get("rootDeviceType"), "ebs");
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class SymphonyVPDCComputeServiceLiveTest extends BaseComputeServiceLiveTe
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Properties getRestProperties() {
|
protected Properties setupRestProperties() {
|
||||||
// TODO remove these lines when this is registered under jclouds-core/rest.properties
|
// TODO remove these lines when this is registered under jclouds-core/rest.properties
|
||||||
Properties restProperties = new Properties();
|
Properties restProperties = new Properties();
|
||||||
restProperties.setProperty("savvis-symphony-vpdc.contextbuilder", SymphonyVPDCContextBuilder.class.getName());
|
restProperties.setProperty("savvis-symphony-vpdc.contextbuilder", SymphonyVPDCContextBuilder.class.getName());
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
|
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
*
|
*
|
||||||
* ====================================================================
|
* ====================================================================
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
@ -19,22 +19,9 @@
|
||||||
|
|
||||||
package org.jclouds.softlayer;
|
package org.jclouds.softlayer;
|
||||||
|
|
||||||
import java.util.Set;
|
import org.jclouds.rest.annotations.Delegate;
|
||||||
|
import org.jclouds.softlayer.features.DatacenterAsyncClient;
|
||||||
import javax.ws.rs.Consumes;
|
import org.jclouds.softlayer.features.VirtualGuestAsyncClient;
|
||||||
import javax.ws.rs.GET;
|
|
||||||
import javax.ws.rs.Path;
|
|
||||||
import javax.ws.rs.PathParam;
|
|
||||||
import javax.ws.rs.core.MediaType;
|
|
||||||
|
|
||||||
import org.jclouds.http.filters.BasicAuthentication;
|
|
||||||
import org.jclouds.rest.annotations.ExceptionParser;
|
|
||||||
import org.jclouds.rest.annotations.RequestFilters;
|
|
||||||
import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
|
|
||||||
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
|
|
||||||
import org.jclouds.softlayer.domain.VirtualGuest;
|
|
||||||
|
|
||||||
import com.google.common.util.concurrent.ListenableFuture;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides asynchronous access to SoftLayer via their REST API.
|
* Provides asynchronous access to SoftLayer via their REST API.
|
||||||
|
@ -44,25 +31,17 @@ import com.google.common.util.concurrent.ListenableFuture;
|
||||||
* @see <a href="http://sldn.softlayer.com/wiki/index.php/REST" />
|
* @see <a href="http://sldn.softlayer.com/wiki/index.php/REST" />
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@RequestFilters(BasicAuthentication.class)
|
|
||||||
@Path("/v{jclouds.api-version}")
|
|
||||||
public interface SoftLayerAsyncClient {
|
public interface SoftLayerAsyncClient {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see SoftLayerClient#listVirtualGuests
|
* Provides asynchronous access to VirtualGuest features.
|
||||||
*/
|
*/
|
||||||
@GET
|
@Delegate
|
||||||
@Path("/SoftLayer_Account/VirtualGuests.json")
|
VirtualGuestAsyncClient getVirtualGuestClient();
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
|
||||||
@ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
|
|
||||||
ListenableFuture<Set<VirtualGuest>> listVirtualGuests();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see SoftLayerClient#getVirtualGuest
|
* Provides asynchronous access to Datacenter features.
|
||||||
*/
|
*/
|
||||||
@GET
|
@Delegate
|
||||||
@Path("/SoftLayer_Virtual_Guest/{id}.json")
|
DatacenterAsyncClient getDatacenterClient();
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
|
||||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
|
||||||
ListenableFuture<VirtualGuest> getVirtualGuest(@PathParam("id") long id);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
|
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
*
|
*
|
||||||
* ====================================================================
|
* ====================================================================
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
@ -19,11 +19,12 @@
|
||||||
|
|
||||||
package org.jclouds.softlayer;
|
package org.jclouds.softlayer;
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import org.jclouds.concurrent.Timeout;
|
import org.jclouds.concurrent.Timeout;
|
||||||
import org.jclouds.softlayer.domain.VirtualGuest;
|
import org.jclouds.rest.annotations.Delegate;
|
||||||
|
import org.jclouds.softlayer.features.DatacenterClient;
|
||||||
|
import org.jclouds.softlayer.features.VirtualGuestClient;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides synchronous access to SoftLayer.
|
* Provides synchronous access to SoftLayer.
|
||||||
|
@ -33,21 +34,18 @@ import org.jclouds.softlayer.domain.VirtualGuest;
|
||||||
* @see <a href="http://sldn.softlayer.com/wiki/index.php/REST" />
|
* @see <a href="http://sldn.softlayer.com/wiki/index.php/REST" />
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@Timeout(duration = 4, timeUnit = TimeUnit.SECONDS)
|
@Timeout(duration = 60, timeUnit = TimeUnit.SECONDS)
|
||||||
public interface SoftLayerClient {
|
public interface SoftLayerClient {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Provides synchronous access to VirtualGuest features.
|
||||||
* @return an account's associated virtual guest objects.
|
|
||||||
*/
|
*/
|
||||||
Set<VirtualGuest> listVirtualGuests();
|
@Delegate
|
||||||
|
VirtualGuestClient getVirtualGuestClient();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Provides synchronous access to Datacenter features.
|
||||||
* @param id
|
|
||||||
* id of the virtual guest
|
|
||||||
* @return virtual guest or null if not found
|
|
||||||
*/
|
*/
|
||||||
VirtualGuest getVirtualGuest(long id);
|
@Delegate
|
||||||
|
DatacenterClient getDatacenterClient();
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,8 +22,8 @@ package org.jclouds.softlayer;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.jclouds.softlayer.config.SoftLayerRestClientModule;
|
|
||||||
import org.jclouds.rest.RestContextBuilder;
|
import org.jclouds.rest.RestContextBuilder;
|
||||||
|
import org.jclouds.softlayer.config.SoftLayerRestClientModule;
|
||||||
|
|
||||||
import com.google.inject.Module;
|
import com.google.inject.Module;
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
|
|
||||||
package org.jclouds.softlayer.config;
|
package org.jclouds.softlayer.config;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import org.jclouds.http.HttpErrorHandler;
|
import org.jclouds.http.HttpErrorHandler;
|
||||||
import org.jclouds.http.HttpRetryHandler;
|
import org.jclouds.http.HttpRetryHandler;
|
||||||
import org.jclouds.http.RequiresHttp;
|
import org.jclouds.http.RequiresHttp;
|
||||||
|
@ -32,8 +34,14 @@ import org.jclouds.rest.ConfiguresRestClient;
|
||||||
import org.jclouds.rest.config.RestClientModule;
|
import org.jclouds.rest.config.RestClientModule;
|
||||||
import org.jclouds.softlayer.SoftLayerAsyncClient;
|
import org.jclouds.softlayer.SoftLayerAsyncClient;
|
||||||
import org.jclouds.softlayer.SoftLayerClient;
|
import org.jclouds.softlayer.SoftLayerClient;
|
||||||
|
import org.jclouds.softlayer.features.DatacenterAsyncClient;
|
||||||
|
import org.jclouds.softlayer.features.DatacenterClient;
|
||||||
|
import org.jclouds.softlayer.features.VirtualGuestAsyncClient;
|
||||||
|
import org.jclouds.softlayer.features.VirtualGuestClient;
|
||||||
import org.jclouds.softlayer.handlers.SoftLayerErrorHandler;
|
import org.jclouds.softlayer.handlers.SoftLayerErrorHandler;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configures the SoftLayer connection.
|
* Configures the SoftLayer connection.
|
||||||
*
|
*
|
||||||
|
@ -43,8 +51,13 @@ import org.jclouds.softlayer.handlers.SoftLayerErrorHandler;
|
||||||
@ConfiguresRestClient
|
@ConfiguresRestClient
|
||||||
public class SoftLayerRestClientModule extends RestClientModule<SoftLayerClient, SoftLayerAsyncClient> {
|
public class SoftLayerRestClientModule extends RestClientModule<SoftLayerClient, SoftLayerAsyncClient> {
|
||||||
|
|
||||||
|
public static final Map<Class<?>, Class<?>> DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>> builder()//
|
||||||
|
.put(VirtualGuestClient.class, VirtualGuestAsyncClient.class)//
|
||||||
|
.put(DatacenterClient.class, DatacenterAsyncClient.class)//
|
||||||
|
.build();
|
||||||
|
|
||||||
public SoftLayerRestClientModule() {
|
public SoftLayerRestClientModule() {
|
||||||
super(SoftLayerClient.class, SoftLayerAsyncClient.class);
|
super(SoftLayerClient.class, SoftLayerAsyncClient.class, DELEGATE_MAP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -0,0 +1,106 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* Licensed 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.softlayer.domain;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
* @see <a href= "http://sldn.softlayer.com/wiki/index.php/SoftLayer_Location_Datacenter_%28type%29"
|
||||||
|
* />
|
||||||
|
*/
|
||||||
|
public class Datacenter implements Comparable<Datacenter> {
|
||||||
|
public static Builder builder() {
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Builder {
|
||||||
|
private long id = -1;
|
||||||
|
private String name;
|
||||||
|
private String longName;
|
||||||
|
|
||||||
|
public Builder id(long id) {
|
||||||
|
this.id = id;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder name(String name) {
|
||||||
|
this.name = name;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder longName(String longName) {
|
||||||
|
this.longName = longName;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Datacenter build() {
|
||||||
|
return new Datacenter(id, name, longName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Builder fromDatacenter(Datacenter in) {
|
||||||
|
return Datacenter.builder().id(in.getId()).name(in.getName()).longName(in.getLongName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private long id = -1;
|
||||||
|
private String name;
|
||||||
|
private String longName;
|
||||||
|
|
||||||
|
// for deserializer
|
||||||
|
Datacenter() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Datacenter(long id, String name, String longName) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
this.longName = longName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(Datacenter arg0) {
|
||||||
|
return new Long(id).compareTo(arg0.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The unique identifier of a specific location.
|
||||||
|
*/
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return A short location description.
|
||||||
|
*/
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return A longer location description.
|
||||||
|
*/
|
||||||
|
public String getLongName() {
|
||||||
|
return longName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder toBuilder() {
|
||||||
|
return Builder.fromDatacenter(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* Licensed 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.softlayer.features;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import javax.ws.rs.Consumes;
|
||||||
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.Path;
|
||||||
|
import javax.ws.rs.PathParam;
|
||||||
|
import javax.ws.rs.core.MediaType;
|
||||||
|
|
||||||
|
import org.jclouds.http.filters.BasicAuthentication;
|
||||||
|
import org.jclouds.rest.annotations.ExceptionParser;
|
||||||
|
import org.jclouds.rest.annotations.QueryParams;
|
||||||
|
import org.jclouds.rest.annotations.RequestFilters;
|
||||||
|
import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
|
||||||
|
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
|
||||||
|
import org.jclouds.softlayer.domain.Datacenter;
|
||||||
|
|
||||||
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides asynchronous access to LocationDatacenter via their REST API.
|
||||||
|
* <p/>
|
||||||
|
*
|
||||||
|
* @see DatacenterClient
|
||||||
|
* @see <a href="http://sldn.softlayer.com/wiki/index.php/REST" />
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@RequestFilters(BasicAuthentication.class)
|
||||||
|
@Path("/v{jclouds.api-version}")
|
||||||
|
public interface DatacenterAsyncClient {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see LocationDatacenterClient#listDatacenters
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("/SoftLayer_Location_Datacenter/Datacenters.json")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
|
||||||
|
ListenableFuture<Set<Datacenter>> listDatacenters();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see LocationDatacenterClient#getLocationDatacenter
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("/SoftLayer_Location_Datacenter/{id}.json")
|
||||||
|
@QueryParams(keys = "objectMask", values = "locationAddress")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||||
|
ListenableFuture<Datacenter> getDatacenter(@PathParam("id") long id);
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* Licensed 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.softlayer.features;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import org.jclouds.concurrent.Timeout;
|
||||||
|
import org.jclouds.softlayer.domain.Datacenter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides synchronous access to LocationDatacenter.
|
||||||
|
* <p/>
|
||||||
|
*
|
||||||
|
* @see DatacenterAsyncClient
|
||||||
|
* @see <a href="http://sldn.softlayer.com/wiki/index.php/REST" />
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Timeout(duration = 4, timeUnit = TimeUnit.SECONDS)
|
||||||
|
public interface DatacenterClient {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return an account's associated datacenter objects.
|
||||||
|
*/
|
||||||
|
Set<Datacenter> listDatacenters();
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* id of the datacenter
|
||||||
|
* @return datacenter or null if not found
|
||||||
|
*/
|
||||||
|
Datacenter getDatacenter(long id);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,118 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* Licensed 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.softlayer.features;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import javax.ws.rs.Consumes;
|
||||||
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.Path;
|
||||||
|
import javax.ws.rs.PathParam;
|
||||||
|
import javax.ws.rs.core.MediaType;
|
||||||
|
|
||||||
|
import org.jclouds.http.filters.BasicAuthentication;
|
||||||
|
import org.jclouds.rest.annotations.ExceptionParser;
|
||||||
|
import org.jclouds.rest.annotations.QueryParams;
|
||||||
|
import org.jclouds.rest.annotations.RequestFilters;
|
||||||
|
import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
|
||||||
|
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
|
||||||
|
import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
|
||||||
|
import org.jclouds.softlayer.domain.VirtualGuest;
|
||||||
|
|
||||||
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides asynchronous access to VirtualGuest via their REST API.
|
||||||
|
* <p/>
|
||||||
|
*
|
||||||
|
* @see VirtualGuestClient
|
||||||
|
* @see <a href="http://sldn.softlayer.com/wiki/index.php/REST" />
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@RequestFilters(BasicAuthentication.class)
|
||||||
|
@Path("/v{jclouds.api-version}")
|
||||||
|
public interface VirtualGuestAsyncClient {
|
||||||
|
public static String GUEST_MASK = "powerState;networkVlans;operatingSystem.passwords;datacenter";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see VirtualGuestClient#listVirtualGuests
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("/SoftLayer_Account/VirtualGuests.json")
|
||||||
|
@QueryParams(keys = "objectMask", values = GUEST_MASK)
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
|
||||||
|
ListenableFuture<Set<VirtualGuest>> listVirtualGuests();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see VirtualGuestClient#getVirtualGuest
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("/SoftLayer_Virtual_Guest/{id}.json")
|
||||||
|
@QueryParams(keys = "objectMask", values = GUEST_MASK)
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||||
|
ListenableFuture<VirtualGuest> getVirtualGuest(@PathParam("id") long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see VirtualGuestClient#rebootHardVirtualGuest
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("/SoftLayer_Virtual_Guest/{id}/rebootHard.json")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ExceptionParser(ReturnVoidOnNotFoundOr404.class)
|
||||||
|
ListenableFuture<Void> rebootHardVirtualGuest(@PathParam("id") long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see VirtualGuestClient#powerOffVirtualGuest
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("/SoftLayer_Virtual_Guest/{id}/powerOff.json")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ExceptionParser(ReturnVoidOnNotFoundOr404.class)
|
||||||
|
ListenableFuture<Void> powerOffVirtualGuest(@PathParam("id") long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see VirtualGuestClient#powerOnVirtualGuest
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("/SoftLayer_Virtual_Guest/{id}/powerOn.json")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ExceptionParser(ReturnVoidOnNotFoundOr404.class)
|
||||||
|
ListenableFuture<Void> powerOnVirtualGuest(@PathParam("id") long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see VirtualGuestClient#pauseVirtualGuest
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("/SoftLayer_Virtual_Guest/{id}/pause.json")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ExceptionParser(ReturnVoidOnNotFoundOr404.class)
|
||||||
|
ListenableFuture<Void> pauseVirtualGuest(@PathParam("id") long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see VirtualGuestClient#resumeVirtualGuest
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("/SoftLayer_Virtual_Guest/{id}/resume.json")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ExceptionParser(ReturnVoidOnNotFoundOr404.class)
|
||||||
|
ListenableFuture<Void> resumeVirtualGuest(@PathParam("id") long id);
|
||||||
|
}
|
|
@ -0,0 +1,92 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* Licensed 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.softlayer.features;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import org.jclouds.concurrent.Timeout;
|
||||||
|
import org.jclouds.softlayer.domain.VirtualGuest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides synchronous access to VirtualGuest.
|
||||||
|
* <p/>
|
||||||
|
*
|
||||||
|
* @see VirtualGuestAsyncClient
|
||||||
|
* @see <a href="http://sldn.softlayer.com/wiki/index.php/REST" />
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Timeout(duration = 4, timeUnit = TimeUnit.SECONDS)
|
||||||
|
public interface VirtualGuestClient {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return an account's associated virtual guest objects.
|
||||||
|
*/
|
||||||
|
Set<VirtualGuest> listVirtualGuests();
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* id of the virtual guest
|
||||||
|
* @return virtual guest or null if not found
|
||||||
|
*/
|
||||||
|
VirtualGuest getVirtualGuest(long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hard reboot the guest.
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* id of the virtual guest
|
||||||
|
*/
|
||||||
|
void rebootHardVirtualGuest(long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Power off a guest
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* id of the virtual guest
|
||||||
|
*/
|
||||||
|
void powerOffVirtualGuest(long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Power on a guest
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* id of the virtual guest
|
||||||
|
*/
|
||||||
|
void powerOnVirtualGuest(long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pause the guest.
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* id of the virtual guest
|
||||||
|
*/
|
||||||
|
void pauseVirtualGuest(long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* resume the guest.
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* id of the virtual guest
|
||||||
|
*/
|
||||||
|
void resumeVirtualGuest(long id);
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
|
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
*
|
*
|
||||||
* ====================================================================
|
* ====================================================================
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
@ -19,83 +19,37 @@
|
||||||
|
|
||||||
package org.jclouds.softlayer;
|
package org.jclouds.softlayer;
|
||||||
|
|
||||||
import static org.jclouds.rest.RestContextFactory.contextSpec;
|
|
||||||
import static org.testng.Assert.assertEquals;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Method;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
import org.jclouds.http.HttpRequest;
|
import org.jclouds.http.HttpRequest;
|
||||||
import org.jclouds.http.filters.BasicAuthentication;
|
|
||||||
import org.jclouds.http.functions.ParseJson;
|
|
||||||
import org.jclouds.rest.RestClientTest;
|
|
||||||
import org.jclouds.rest.RestContextSpec;
|
|
||||||
import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
|
|
||||||
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
|
|
||||||
import org.jclouds.rest.internal.RestAnnotationProcessor;
|
import org.jclouds.rest.internal.RestAnnotationProcessor;
|
||||||
|
import org.jclouds.softlayer.features.BaseSoftLayerAsyncClientTest;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import com.google.common.collect.Iterables;
|
|
||||||
import com.google.inject.TypeLiteral;
|
import com.google.inject.TypeLiteral;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests annotation parsing of {@code SoftLayerAsyncClient}
|
* Tests behavior of {@code SoftLayerAsyncClient}
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@Test(groups = "unit")
|
// NOTE:without testName, this will not call @Before* and fail w/NPE during surefire
|
||||||
public class SoftLayerAsyncClientTest extends RestClientTest<SoftLayerAsyncClient> {
|
@Test(groups = "unit", testName = "SoftLayerAsyncClientTest")
|
||||||
|
public class SoftLayerAsyncClientTest extends BaseSoftLayerAsyncClientTest<SoftLayerAsyncClient> {
|
||||||
|
|
||||||
public void testListVirtualGuests() throws SecurityException, NoSuchMethodException, IOException {
|
private SoftLayerAsyncClient asyncClient;
|
||||||
Method method = SoftLayerAsyncClient.class.getMethod("listVirtualGuests");
|
private SoftLayerClient syncClient;
|
||||||
HttpRequest httpRequest = processor.createRequest(method);
|
|
||||||
|
|
||||||
assertRequestLineEquals(httpRequest,
|
|
||||||
"GET https://api.softlayer.com/rest/v3/SoftLayer_Account/VirtualGuests.json HTTP/1.1");
|
|
||||||
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
|
||||||
assertPayloadEquals(httpRequest, null, null, false);
|
|
||||||
|
|
||||||
// now make sure request filters apply by replaying
|
|
||||||
httpRequest = Iterables.getOnlyElement(httpRequest.getFilters()).filter(httpRequest);
|
|
||||||
httpRequest = Iterables.getOnlyElement(httpRequest.getFilters()).filter(httpRequest);
|
|
||||||
|
|
||||||
assertRequestLineEquals(httpRequest,
|
|
||||||
"GET https://api.softlayer.com/rest/v3/SoftLayer_Account/VirtualGuests.json HTTP/1.1");
|
|
||||||
// for example, using basic authentication, we should get "only one"
|
|
||||||
// header
|
|
||||||
assertNonPayloadHeadersEqual(httpRequest,
|
|
||||||
"Accept: application/json\nAuthorization: Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==\n");
|
|
||||||
assertPayloadEquals(httpRequest, null, null, false);
|
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, httpRequest, ParseJson.class);
|
|
||||||
assertSaxResponseParserClassEquals(method, null);
|
|
||||||
assertExceptionParserClassEquals(method, ReturnEmptySetOnNotFoundOr404.class);
|
|
||||||
|
|
||||||
checkFilters(httpRequest);
|
|
||||||
|
|
||||||
|
public void testSync() throws SecurityException, NoSuchMethodException, InterruptedException, ExecutionException {
|
||||||
|
assert syncClient.getVirtualGuestClient() != null;
|
||||||
|
assert syncClient.getDatacenterClient() != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testGetVirtualGuest() throws SecurityException, NoSuchMethodException, IOException {
|
public void testAsync() throws SecurityException, NoSuchMethodException, InterruptedException, ExecutionException {
|
||||||
Method method = SoftLayerAsyncClient.class.getMethod("getVirtualGuest", long.class);
|
assert asyncClient.getVirtualGuestClient() != null;
|
||||||
HttpRequest httpRequest = processor.createRequest(method, 1234);
|
assert asyncClient.getDatacenterClient() != null;
|
||||||
|
|
||||||
assertRequestLineEquals(httpRequest,
|
|
||||||
"GET https://api.softlayer.com/rest/v3/SoftLayer_Virtual_Guest/1234.json HTTP/1.1");
|
|
||||||
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
|
||||||
assertPayloadEquals(httpRequest, null, null, false);
|
|
||||||
|
|
||||||
assertResponseParserClassEquals(method, httpRequest, ParseJson.class);
|
|
||||||
assertSaxResponseParserClassEquals(method, null);
|
|
||||||
assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
|
|
||||||
|
|
||||||
checkFilters(httpRequest);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void checkFilters(HttpRequest request) {
|
|
||||||
assertEquals(request.getFilters().size(), 1);
|
|
||||||
assertEquals(request.getFilters().get(0).getClass(), BasicAuthentication.class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -104,9 +58,16 @@ public class SoftLayerAsyncClientTest extends RestClientTest<SoftLayerAsyncClien
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
@Override
|
@Override
|
||||||
public RestContextSpec<SoftLayerClient, SoftLayerAsyncClient> createContextSpec() {
|
protected void setupFactory() throws IOException {
|
||||||
return contextSpec("softlayer", "https://api.softlayer.com/rest", "3", "", "identity", "credential",
|
super.setupFactory();
|
||||||
SoftLayerClient.class, SoftLayerAsyncClient.class);
|
asyncClient = injector.getInstance(SoftLayerAsyncClient.class);
|
||||||
|
syncClient = injector.getInstance(SoftLayerClient.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void checkFilters(HttpRequest request) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* Licensed 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.softlayer.features;
|
||||||
|
|
||||||
|
import static org.testng.Assert.assertEquals;
|
||||||
|
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.jclouds.http.HttpRequest;
|
||||||
|
import org.jclouds.http.filters.BasicAuthentication;
|
||||||
|
import org.jclouds.rest.RestClientTest;
|
||||||
|
import org.jclouds.rest.RestContextFactory;
|
||||||
|
import org.jclouds.rest.RestContextSpec;
|
||||||
|
import org.jclouds.softlayer.SoftLayerAsyncClient;
|
||||||
|
import org.jclouds.softlayer.SoftLayerClient;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
public abstract class BaseSoftLayerAsyncClientTest<T> extends RestClientTest<T> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void checkFilters(HttpRequest request) {
|
||||||
|
assertEquals(request.getFilters().size(), 1);
|
||||||
|
assertEquals(request.getFilters().get(0).getClass(), BasicAuthentication.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RestContextSpec<SoftLayerClient, SoftLayerAsyncClient> createContextSpec() {
|
||||||
|
Properties props = new Properties();
|
||||||
|
return new RestContextFactory().createContextSpec("softlayer", "apiKey", "secretKey", props);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* Licensed 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.softlayer.features;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.jclouds.logging.log4j.config.Log4JLoggingModule;
|
||||||
|
import org.jclouds.rest.RestContext;
|
||||||
|
import org.jclouds.rest.RestContextFactory;
|
||||||
|
import org.jclouds.softlayer.SoftLayerAsyncClient;
|
||||||
|
import org.jclouds.softlayer.SoftLayerClient;
|
||||||
|
import org.jclouds.softlayer.SoftLayerContextBuilder;
|
||||||
|
import org.jclouds.softlayer.SoftLayerPropertiesBuilder;
|
||||||
|
import org.testng.annotations.AfterGroups;
|
||||||
|
import org.testng.annotations.BeforeGroups;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
import com.google.inject.Module;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests behavior of {@code SoftLayerClient}
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Test(groups = "live")
|
||||||
|
public class BaseSoftLayerClientLiveTest {
|
||||||
|
|
||||||
|
protected RestContext<SoftLayerClient, SoftLayerAsyncClient> context;
|
||||||
|
|
||||||
|
@BeforeGroups(groups = { "live" })
|
||||||
|
public void setupClient() {
|
||||||
|
String identity = checkNotNull(System.getProperty("test.softlayer.identity"), "test.softlayer.identity");
|
||||||
|
String credential = checkNotNull(System.getProperty("test.softlayer.credential"), "test.softlayer.credential");
|
||||||
|
|
||||||
|
Properties restProperties = new Properties();
|
||||||
|
restProperties.setProperty("softlayer.contextbuilder", SoftLayerContextBuilder.class.getName());
|
||||||
|
restProperties.setProperty("softlayer.propertiesbuilder", SoftLayerPropertiesBuilder.class.getName());
|
||||||
|
|
||||||
|
context = new RestContextFactory(restProperties).createContext("softlayer", identity, credential,
|
||||||
|
ImmutableSet.<Module> of(new Log4JLoggingModule()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterGroups(groups = "live")
|
||||||
|
protected void tearDown() {
|
||||||
|
if (context != null)
|
||||||
|
context.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,94 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* Licensed 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.softlayer.features;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
import org.jclouds.http.HttpRequest;
|
||||||
|
import org.jclouds.http.functions.ParseJson;
|
||||||
|
import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
|
||||||
|
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
|
||||||
|
import org.jclouds.rest.internal.RestAnnotationProcessor;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import com.google.common.collect.Iterables;
|
||||||
|
import com.google.inject.TypeLiteral;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests annotation parsing of {@code DatacenterAsyncClient}
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Test(groups = "unit")
|
||||||
|
public class DatacenterAsyncClientTest extends BaseSoftLayerAsyncClientTest<DatacenterAsyncClient> {
|
||||||
|
|
||||||
|
public void testListDatacenters() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = DatacenterAsyncClient.class.getMethod("listDatacenters");
|
||||||
|
HttpRequest httpRequest = processor.createRequest(method);
|
||||||
|
|
||||||
|
assertRequestLineEquals(httpRequest,
|
||||||
|
"GET https://api.softlayer.com/rest/v3/SoftLayer_Location_Datacenter/Datacenters.json HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
||||||
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
|
// now make sure request filters apply by replaying
|
||||||
|
httpRequest = Iterables.getOnlyElement(httpRequest.getFilters()).filter(httpRequest);
|
||||||
|
httpRequest = Iterables.getOnlyElement(httpRequest.getFilters()).filter(httpRequest);
|
||||||
|
|
||||||
|
assertRequestLineEquals(httpRequest,
|
||||||
|
"GET https://api.softlayer.com/rest/v3/SoftLayer_Location_Datacenter/Datacenters.json HTTP/1.1");
|
||||||
|
// for example, using basic authentication, we should get "only one"
|
||||||
|
// header
|
||||||
|
assertNonPayloadHeadersEqual(httpRequest,
|
||||||
|
"Accept: application/json\nAuthorization: Basic YXBpS2V5OnNlY3JldEtleQ==\n");
|
||||||
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, httpRequest, ParseJson.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
assertExceptionParserClassEquals(method, ReturnEmptySetOnNotFoundOr404.class);
|
||||||
|
|
||||||
|
checkFilters(httpRequest);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetDatacenter() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = DatacenterAsyncClient.class.getMethod("getDatacenter", long.class);
|
||||||
|
HttpRequest httpRequest = processor.createRequest(method, 1234);
|
||||||
|
|
||||||
|
assertRequestLineEquals(httpRequest,
|
||||||
|
"GET https://api.softlayer.com/rest/v3/SoftLayer_Location_Datacenter/1234.json?objectMask=locationAddress HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
||||||
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, httpRequest, ParseJson.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
|
||||||
|
|
||||||
|
checkFilters(httpRequest);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected TypeLiteral<RestAnnotationProcessor<DatacenterAsyncClient>> createTypeLiteral() {
|
||||||
|
return new TypeLiteral<RestAnnotationProcessor<DatacenterAsyncClient>>() {
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* Licensed 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.softlayer.features;
|
||||||
|
|
||||||
|
import static org.testng.Assert.assertEquals;
|
||||||
|
import static org.testng.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.jclouds.softlayer.domain.Datacenter;
|
||||||
|
import org.testng.annotations.BeforeGroups;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests behavior of {@code DatacenterClient}
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Test(groups = "live")
|
||||||
|
public class DatacenterClientLiveTest extends BaseSoftLayerClientLiveTest {
|
||||||
|
@BeforeGroups(groups = { "live" })
|
||||||
|
public void setupClient() {
|
||||||
|
super.setupClient();
|
||||||
|
client = context.getApi().getDatacenterClient();
|
||||||
|
}
|
||||||
|
|
||||||
|
private DatacenterClient client;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testListDatacenters() throws Exception {
|
||||||
|
Set<Datacenter> response = client.listDatacenters();
|
||||||
|
assert null != response;
|
||||||
|
assertTrue(response.size() >= 0);
|
||||||
|
for (Datacenter vg : response) {
|
||||||
|
Datacenter newDetails = client.getDatacenter(vg.getId());
|
||||||
|
assertEquals(vg.getId(), newDetails.getId());
|
||||||
|
checkDatacenter(vg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkDatacenter(Datacenter vg) {
|
||||||
|
assert vg.getId() > 0 : vg;
|
||||||
|
assert vg.getName() != null : vg;
|
||||||
|
assert vg.getLongName() != null : vg;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,184 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* Licensed 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.softlayer.features;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
import org.jclouds.http.HttpRequest;
|
||||||
|
import org.jclouds.http.functions.ParseJson;
|
||||||
|
import org.jclouds.http.functions.ReleasePayloadAndReturn;
|
||||||
|
import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
|
||||||
|
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
|
||||||
|
import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
|
||||||
|
import org.jclouds.rest.internal.RestAnnotationProcessor;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import com.google.common.collect.Iterables;
|
||||||
|
import com.google.inject.TypeLiteral;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests annotation parsing of {@code VirtualGuestAsyncClient}
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Test(groups = "unit")
|
||||||
|
public class VirtualGuestAsyncClientTest extends BaseSoftLayerAsyncClientTest<VirtualGuestAsyncClient> {
|
||||||
|
|
||||||
|
public void testListVirtualGuests() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = VirtualGuestAsyncClient.class.getMethod("listVirtualGuests");
|
||||||
|
HttpRequest httpRequest = processor.createRequest(method);
|
||||||
|
|
||||||
|
assertRequestLineEquals(
|
||||||
|
httpRequest,
|
||||||
|
"GET https://api.softlayer.com/rest/v3/SoftLayer_Account/VirtualGuests.json?objectMask=powerState%3BnetworkVlans%3BoperatingSystem.passwords%3Bdatacenter HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
||||||
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
|
// now make sure request filters apply by replaying
|
||||||
|
httpRequest = Iterables.getOnlyElement(httpRequest.getFilters()).filter(httpRequest);
|
||||||
|
httpRequest = Iterables.getOnlyElement(httpRequest.getFilters()).filter(httpRequest);
|
||||||
|
|
||||||
|
assertRequestLineEquals(
|
||||||
|
httpRequest,
|
||||||
|
"GET https://api.softlayer.com/rest/v3/SoftLayer_Account/VirtualGuests.json?objectMask=powerState%3BnetworkVlans%3BoperatingSystem.passwords%3Bdatacenter HTTP/1.1");
|
||||||
|
// for example, using basic authentication, we should get "only one"
|
||||||
|
// header
|
||||||
|
assertNonPayloadHeadersEqual(httpRequest,
|
||||||
|
"Accept: application/json\nAuthorization: Basic YXBpS2V5OnNlY3JldEtleQ==\n");
|
||||||
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, httpRequest, ParseJson.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
assertExceptionParserClassEquals(method, ReturnEmptySetOnNotFoundOr404.class);
|
||||||
|
|
||||||
|
checkFilters(httpRequest);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetVirtualGuest() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = VirtualGuestAsyncClient.class.getMethod("getVirtualGuest", long.class);
|
||||||
|
HttpRequest httpRequest = processor.createRequest(method, 1234);
|
||||||
|
|
||||||
|
assertRequestLineEquals(
|
||||||
|
httpRequest,
|
||||||
|
"GET https://api.softlayer.com/rest/v3/SoftLayer_Virtual_Guest/1234.json?objectMask=powerState%3BnetworkVlans%3BoperatingSystem.passwords%3Bdatacenter HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
||||||
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, httpRequest, ParseJson.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
|
||||||
|
|
||||||
|
checkFilters(httpRequest);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testRebootHardVirtualGuest() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = VirtualGuestAsyncClient.class.getMethod("rebootHardVirtualGuest", long.class);
|
||||||
|
HttpRequest httpRequest = processor.createRequest(method, 1234);
|
||||||
|
|
||||||
|
assertRequestLineEquals(httpRequest,
|
||||||
|
"GET https://api.softlayer.com/rest/v3/SoftLayer_Virtual_Guest/1234/rebootHard.json HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
||||||
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, httpRequest, ReleasePayloadAndReturn.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
assertExceptionParserClassEquals(method, ReturnVoidOnNotFoundOr404.class);
|
||||||
|
|
||||||
|
checkFilters(httpRequest);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPowerOffVirtualGuest() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = VirtualGuestAsyncClient.class.getMethod("powerOffVirtualGuest", long.class);
|
||||||
|
HttpRequest httpRequest = processor.createRequest(method, 1234);
|
||||||
|
|
||||||
|
assertRequestLineEquals(httpRequest,
|
||||||
|
"GET https://api.softlayer.com/rest/v3/SoftLayer_Virtual_Guest/1234/powerOff.json HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
||||||
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, httpRequest, ReleasePayloadAndReturn.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
assertExceptionParserClassEquals(method, ReturnVoidOnNotFoundOr404.class);
|
||||||
|
|
||||||
|
checkFilters(httpRequest);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPowerOnVirtualGuest() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = VirtualGuestAsyncClient.class.getMethod("powerOnVirtualGuest", long.class);
|
||||||
|
HttpRequest httpRequest = processor.createRequest(method, 1234);
|
||||||
|
|
||||||
|
assertRequestLineEquals(httpRequest,
|
||||||
|
"GET https://api.softlayer.com/rest/v3/SoftLayer_Virtual_Guest/1234/powerOn.json HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
||||||
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, httpRequest, ReleasePayloadAndReturn.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
assertExceptionParserClassEquals(method, ReturnVoidOnNotFoundOr404.class);
|
||||||
|
|
||||||
|
checkFilters(httpRequest);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPauseVirtualGuest() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = VirtualGuestAsyncClient.class.getMethod("pauseVirtualGuest", long.class);
|
||||||
|
HttpRequest httpRequest = processor.createRequest(method, 1234);
|
||||||
|
|
||||||
|
assertRequestLineEquals(httpRequest,
|
||||||
|
"GET https://api.softlayer.com/rest/v3/SoftLayer_Virtual_Guest/1234/pause.json HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
||||||
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, httpRequest, ReleasePayloadAndReturn.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
assertExceptionParserClassEquals(method, ReturnVoidOnNotFoundOr404.class);
|
||||||
|
|
||||||
|
checkFilters(httpRequest);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testResumeVirtualGuest() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = VirtualGuestAsyncClient.class.getMethod("resumeVirtualGuest", long.class);
|
||||||
|
HttpRequest httpRequest = processor.createRequest(method, 1234);
|
||||||
|
|
||||||
|
assertRequestLineEquals(httpRequest,
|
||||||
|
"GET https://api.softlayer.com/rest/v3/SoftLayer_Virtual_Guest/1234/resume.json HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
|
||||||
|
assertPayloadEquals(httpRequest, null, null, false);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, httpRequest, ReleasePayloadAndReturn.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
assertExceptionParserClassEquals(method, ReturnVoidOnNotFoundOr404.class);
|
||||||
|
|
||||||
|
checkFilters(httpRequest);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected TypeLiteral<RestAnnotationProcessor<VirtualGuestAsyncClient>> createTypeLiteral() {
|
||||||
|
return new TypeLiteral<RestAnnotationProcessor<VirtualGuestAsyncClient>>() {
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,57 +17,31 @@
|
||||||
* ====================================================================
|
* ====================================================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jclouds.softlayer;
|
package org.jclouds.softlayer.features;
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
import static org.testng.Assert.assertTrue;
|
import static org.testng.Assert.assertTrue;
|
||||||
|
|
||||||
import java.util.Properties;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.jclouds.logging.log4j.config.Log4JLoggingModule;
|
|
||||||
import org.jclouds.rest.RestContext;
|
|
||||||
import org.jclouds.rest.RestContextFactory;
|
|
||||||
import org.jclouds.softlayer.domain.VirtualGuest;
|
import org.jclouds.softlayer.domain.VirtualGuest;
|
||||||
import org.testng.annotations.AfterGroups;
|
|
||||||
import org.testng.annotations.BeforeGroups;
|
import org.testng.annotations.BeforeGroups;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
|
||||||
import com.google.inject.Module;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests behavior of {@code SoftLayerClient}
|
* Tests behavior of {@code VirtualGuestClient}
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@Test(groups = "live")
|
@Test(groups = "live")
|
||||||
public class SoftLayerClientLiveTest {
|
public class VirtualGuestClientLiveTest extends BaseSoftLayerClientLiveTest {
|
||||||
|
|
||||||
private SoftLayerClient client;
|
|
||||||
private RestContext<SoftLayerClient, SoftLayerAsyncClient> context;
|
|
||||||
|
|
||||||
@BeforeGroups(groups = { "live" })
|
@BeforeGroups(groups = { "live" })
|
||||||
public void setupClient() {
|
public void setupClient() {
|
||||||
String identity = checkNotNull(System.getProperty("test.softlayer.identity"), "test.softlayer.identity");
|
super.setupClient();
|
||||||
String credential = checkNotNull(System.getProperty("test.softlayer.credential"), "test.softlayer.credential");
|
client = context.getApi().getVirtualGuestClient();
|
||||||
|
|
||||||
Properties restProperties = new Properties();
|
|
||||||
restProperties.setProperty("softlayer.contextbuilder", SoftLayerContextBuilder.class.getName());
|
|
||||||
restProperties.setProperty("softlayer.propertiesbuilder", SoftLayerPropertiesBuilder.class.getName());
|
|
||||||
|
|
||||||
context = new RestContextFactory(restProperties).createContext("softlayer", identity, credential, ImmutableSet
|
|
||||||
.<Module> of(new Log4JLoggingModule()));
|
|
||||||
|
|
||||||
client = context.getApi();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterGroups(groups = "live")
|
private VirtualGuestClient client;
|
||||||
void tearDown() {
|
|
||||||
if (context != null)
|
|
||||||
context.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testListVirtualGuests() throws Exception {
|
public void testListVirtualGuests() throws Exception {
|
Loading…
Reference in New Issue