glesys api changes

This commit is contained in:
Adrian Cole 2012-02-10 16:39:27 +01:00
parent 241a33b5c8
commit 1c8bc98733
14 changed files with 234 additions and 101 deletions

View File

@ -105,6 +105,7 @@ public class GleSYSComputeServiceAdapter implements ComputeServiceAdapter<Server
builder.datacenter(template.getLocation().getId()); builder.datacenter(template.getLocation().getId());
builder.templateName(template.getImage().getId()); builder.templateName(template.getImage().getId());
builder.platform(template.getHardware().getHypervisor()); builder.platform(template.getHardware().getHypervisor());
builder.memorySizeMB(template.getHardware().getRam());
builder.diskSizeGB(Math.round(template.getHardware().getVolumes().get(0).getSize())); builder.diskSizeGB(Math.round(template.getHardware().getVolumes().get(0).getSize()));
builder.cpuCores((int) template.getHardware().getProcessors().get(0).getCores()); builder.cpuCores((int) template.getHardware().getProcessors().get(0).getCores());
builder.transferGB(50);// TODO: add to template options with default value builder.transferGB(50);// TODO: add to template options with default value

View File

@ -53,6 +53,7 @@ import org.jclouds.util.InetAddresses2.IsPrivateIPAddress;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import com.google.common.base.Strings;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
@ -113,14 +114,14 @@ public class ServerDetailsToNodeMetadata implements Function<ServerDetails, Node
from.getPlatform()).build()); from.getPlatform()).build());
builder.state(serverStateToNodeState.get(client.getServerClient().getServerStatus(from.getId(), builder.state(serverStateToNodeState.get(client.getServerClient().getServerStatus(from.getId(),
ServerStatusOptions.Builder.state()).getState())); ServerStatusOptions.Builder.state()).getState()));
Iterable<String> addresses = Iterables.transform(from.getIps(), new Function<Ip, String>() { Iterable<String> addresses = Iterables.filter(Iterables.transform(from.getIps(), new Function<Ip, String>() {
@Override @Override
public String apply(Ip arg0) { public String apply(Ip arg0) {
return arg0.getIp(); return Strings.emptyToNull(arg0.getIp());
} }
}); }), Predicates.notNull());
builder.publicAddresses(Iterables.filter(addresses, Predicates.not(IsPrivateIPAddress.INSTANCE))); builder.publicAddresses(Iterables.filter(addresses, Predicates.not(IsPrivateIPAddress.INSTANCE)));
builder.privateAddresses(Iterables.filter(addresses, IsPrivateIPAddress.INSTANCE)); builder.privateAddresses(Iterables.filter(addresses, IsPrivateIPAddress.INSTANCE));
return builder.build(); return builder.build();

View File

@ -51,7 +51,7 @@ import com.google.common.net.InetAddresses;
*/ */
public class GleSYSTemplateOptions extends TemplateOptions implements Cloneable { public class GleSYSTemplateOptions extends TemplateOptions implements Cloneable {
protected String ip; protected String ip = "any";
@Override @Override
public GleSYSTemplateOptions clone() { public GleSYSTemplateOptions clone() {
@ -76,7 +76,7 @@ public class GleSYSTemplateOptions extends TemplateOptions implements Cloneable
*/ */
public TemplateOptions ip(String ip) { public TemplateOptions ip(String ip) {
if (ip != null) if (ip != null)
checkArgument(InetAddresses.isInetAddress(ip), "ip %s is not valid", ip); checkArgument("any".equals(ip) || InetAddresses.isInetAddress(ip), "ip %s is not valid", ip);
this.ip = ip; this.ip = ip;
return this; return this;
} }

View File

@ -20,6 +20,7 @@
package org.jclouds.glesys.domain; package org.jclouds.glesys.domain;
import com.google.common.base.Objects; import com.google.common.base.Objects;
import com.google.gson.annotations.SerializedName;
/** /**
* Represents an ip address used by a server. * Represents an ip address used by a server.
@ -71,6 +72,7 @@ public class Ip {
} }
} }
@SerializedName("ipaddress")
protected final String ip; protected final String ip;
protected final int version; protected final int version;
protected final double cost; protected final double cost;

View File

@ -18,14 +18,13 @@
*/ */
package org.jclouds.glesys.domain; package org.jclouds.glesys.domain;
import com.google.common.collect.ImmutableList;
import com.google.gson.annotations.SerializedName;
import java.util.Arrays;
import java.util.List;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Set;
import com.google.common.collect.ImmutableSet;
import com.google.gson.annotations.SerializedName;
/** /**
* Detailed information about a server such as cpuCores, hardware configuration * Detailed information about a server such as cpuCores, hardware configuration
* (cpu, memory and disk), ip adresses, cost, transfer, os and more. * (cpu, memory and disk), ip adresses, cost, transfer, os and more.
@ -46,7 +45,7 @@ public class ServerDetails extends Server {
private int diskSizeGB; private int diskSizeGB;
private int transferGB; private int transferGB;
private Cost cost; private Cost cost;
private List<Ip> ips; private Set<Ip> ips = ImmutableSet.of();
public Builder description(String description) { public Builder description(String description) {
this.description = description; this.description = description;
@ -84,11 +83,11 @@ public class ServerDetails extends Server {
} }
public Builder ips(Ip... ips) { public Builder ips(Ip... ips) {
return ips(Arrays.asList(ips)); return ips(ImmutableSet.copyOf(ips));
} }
public Builder ips(List<Ip> ips) { public Builder ips(Iterable<Ip> ips) {
this.ips = ips; this.ips = ImmutableSet.copyOf(ips);
return this; return this;
} }
@ -140,10 +139,10 @@ public class ServerDetails extends Server {
private final int transferGB; private final int transferGB;
private final Cost cost; private final Cost cost;
@SerializedName("iplist") @SerializedName("iplist")
private final List<Ip> ips; private final Set<Ip> ips;
public ServerDetails(String id, String hostname, String datacenter, String platform, String templateName, public ServerDetails(String id, String hostname, String datacenter, String platform, String templateName,
String description, int cpuCores, int memorySizeMB, int diskSizeGB, int transferGB, Cost cost, List<Ip> ips) { String description, int cpuCores, int memorySizeMB, int diskSizeGB, int transferGB, Cost cost, Set<Ip> ips) {
super(id, hostname, datacenter, platform); super(id, hostname, datacenter, platform);
this.templateName = checkNotNull(templateName, "template"); this.templateName = checkNotNull(templateName, "template");
this.description = description; this.description = description;
@ -152,7 +151,7 @@ public class ServerDetails extends Server {
this.diskSizeGB = diskSizeGB; this.diskSizeGB = diskSizeGB;
this.transferGB = transferGB; this.transferGB = transferGB;
this.cost = checkNotNull(cost, "cost"); this.cost = checkNotNull(cost, "cost");
this.ips = ips == null ? ImmutableList.<Ip>of() : ips; this.ips = ImmutableSet.<Ip>copyOf(ips);
} }
/** /**
@ -200,7 +199,7 @@ public class ServerDetails extends Server {
/** /**
* @return the ip addresses assigned to the server * @return the ip addresses assigned to the server
*/ */
public List<Ip> getIps() { public Set<Ip> getIps() {
return ips; return ips;
} }

View File

@ -46,24 +46,26 @@ public class GleSYSErrorHandler implements HttpErrorHandler {
// it is important to always read fully and close streams // it is important to always read fully and close streams
String message = parseMessage(response); String message = parseMessage(response);
Exception exception = message != null ? new HttpResponseException(command, response, message) Exception exception = message != null ? new HttpResponseException(command, response, message)
: new HttpResponseException(command, response); : new HttpResponseException(command, response);
try { try {
message = message != null ? message : String.format("%s -> %s", command.getCurrentRequest().getRequestLine(), message = message != null ? message : String.format("%s -> %s", command.getCurrentRequest().getRequestLine(),
response.getStatusLine()); response.getStatusLine());
switch (response.getStatusCode()) { switch (response.getStatusCode()) {
case 401: case 401:
case 403: case 403:
exception = new AuthorizationException(message, exception); exception = new AuthorizationException(message, exception);
break; break;
case 404: case 400:
if (!command.getCurrentRequest().getMethod().equals("DELETE")) { if (command.getCurrentRequest().getEndpoint().getPath().indexOf("delete") != -1
exception = new ResourceNotFoundException(message, exception); && message.indexOf("Could not find") != -1) {
} exception = new ResourceNotFoundException(message, exception);
break; }
case 500: break;
if (message != null && message.indexOf("Unable to determine package for") != -1) { case 404:
exception = new ResourceNotFoundException(message, exception); if (command.getCurrentRequest().getEndpoint().getPath().indexOf("delete") == -1) {
} exception = new ResourceNotFoundException(message, exception);
}
break;
} }
} finally { } finally {
if (response.getPayload() != null) if (response.getPayload() != null)

View File

@ -18,22 +18,22 @@
*/ */
package org.jclouds.glesys; package org.jclouds.glesys;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.reportMatcher; import static org.easymock.EasyMock.reportMatcher;
import static org.easymock.classextension.EasyMock.createMock; import static org.easymock.EasyMock.verify;
import static org.easymock.classextension.EasyMock.replay;
import static org.easymock.classextension.EasyMock.verify;
import java.net.URI; import java.net.URI;
import org.easymock.IArgumentMatcher; import org.easymock.IArgumentMatcher;
import org.jclouds.glesys.handlers.GleSYSErrorHandler;
import org.jclouds.http.HttpCommand; import org.jclouds.http.HttpCommand;
import org.jclouds.http.HttpRequest; import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpResponse; import org.jclouds.http.HttpResponse;
import org.jclouds.io.Payloads; import org.jclouds.io.Payloads;
import org.jclouds.rest.AuthorizationException; import org.jclouds.rest.AuthorizationException;
import org.jclouds.rest.ResourceNotFoundException; import org.jclouds.rest.ResourceNotFoundException;
import org.jclouds.glesys.handlers.GleSYSErrorHandler;
import org.jclouds.util.Strings2; import org.jclouds.util.Strings2;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@ -46,21 +46,22 @@ import com.google.inject.Guice;
@Test(groups = { "unit" }) @Test(groups = { "unit" })
public class GleSYSErrorHandlerTest { public class GleSYSErrorHandlerTest {
@Test
public void test500MakesResourceNotFoundExceptionOnUnableToDeterminePackage() {
assertCodeMakes(
"GET",
URI.create("https://api.glesys.com/foo"),
500,
"",
"{\"error\":\"Unable to determine package for 'node2102835255.me.org'.\"}",
ResourceNotFoundException.class);
}
@Test @Test
public void test401MakesAuthorizationException() { public void test401MakesAuthorizationException() {
assertCodeMakes("GET", URI.create("https://api.glesys.com/foo"), 401, "", "Unauthorized", assertCodeMakes("GET", URI.create("https://api.glesys.com/foo"), 401, "", "Unauthorized",
AuthorizationException.class); AuthorizationException.class);
}
@Test
public void test400MakesResourceNotFoundExceptionOnCouldNotFind() {
assertCodeMakes(
"POST",
URI.create("https://api.glesys.com/domain/delete/format/json"),
400,
"",
"{\"response\":{\"status\":{\"code\":400,\"timestamp\":\"2012-02-10T12:07:56+01:00\",\"text\":\"Could not find domain on this account.\n\"},\"debug\":{\"input\":{\"domainname\":\"email-test.jclouds.org\"}}}}",
ResourceNotFoundException.class);
} }
@Test @Test

View File

@ -0,0 +1,107 @@
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds 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.glesys.compute.functions;
import static org.jclouds.io.Payloads.newUrlEncodedFormPayload;
import static org.testng.Assert.assertEquals;
import java.net.URI;
import org.jclouds.compute.domain.HardwareBuilder;
import org.jclouds.compute.domain.NodeMetadataBuilder;
import org.jclouds.compute.domain.NodeState;
import org.jclouds.compute.domain.OperatingSystem;
import org.jclouds.compute.domain.OsFamily;
import org.jclouds.compute.domain.Processor;
import org.jclouds.compute.domain.Volume;
import org.jclouds.compute.domain.internal.VolumeImpl;
import org.jclouds.glesys.compute.internal.BaseGleSYSComputeServiceExpectTest;
import org.jclouds.glesys.features.ServerClientExpectTest;
import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpResponse;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
/**
* TODO
*
*/
@Test(groups = "unit", testName = "ServerDetailsToNodeMetadataTest")
public class ServerDetailsToNodeMetadataTest extends BaseGleSYSComputeServiceExpectTest {
@Test
public void testServerDetailsRequest() {
ServerDetailsToNodeMetadata toTest = injectorForKnownArgumentsAndConstantPassword(
ImmutableMap
.<HttpRequest, HttpResponse> builder()
.put(HttpRequest
.builder()
.method("POST")
.endpoint(URI.create("https://api.glesys.com/server/details/format/json"))
.headers(
ImmutableMultimap.<String, String> builder().put("Accept", "application/json")
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(
newUrlEncodedFormPayload(ImmutableMultimap.<String, String> builder()
.put("serverid", "xm3276891").build())).build(),
HttpResponse
.builder()
.statusCode(200)
.payload(
payloadFromString("{\"response\":{\"status\":{\"code\":200,\"timestamp\":\"2012-02-10T11:28:50+01:00\",\"text\":\"OK\"},\"server\":{\"state\":\"running\"},\"debug\":{\"input\":{\"serverid\":\"xm3276891\",\"statustype\":\"state\"}}}}"))
.build())
.put(HttpRequest
.builder()
.method("POST")
.endpoint(URI.create("https://api.glesys.com/server/status/format/json"))
.headers(
ImmutableMultimap.<String, String> builder().put("Accept", "application/json")
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(
newUrlEncodedFormPayload(ImmutableMultimap.<String, String> builder()
.put("serverid", "xm3276891").put("statustype", "state").build())).build(),
HttpResponse.builder().statusCode(206).payload(payloadFromResource("/server_status.json"))
.build()).build()
).getInstance(ServerDetailsToNodeMetadata.class);
assertEquals(
toTest.apply(ServerClientExpectTest.expectedServerDetails()),
new NodeMetadataBuilder()
.ids("xm3276891")
.name("glesys-s-6dd")
.hostname("glesys-s-6dd")
.group("glesys-s")
.imageId("Ubuntu 11.04 x64")
.operatingSystem(
OperatingSystem.builder().name("Ubuntu 11.04 x64").family(OsFamily.UBUNTU).version("11.04")
.is64Bit(true).description("Ubuntu 11.04 x64").build())
.publicAddresses(ImmutableSet.of("109.74.10.45"))
.hardware(
new HardwareBuilder().ids("xm3276891").ram(512)
.processors(ImmutableList.of(new Processor(1, 1.0)))
.volumes(ImmutableList.<Volume> of(new VolumeImpl(5f, true, true))).hypervisor("Xen")
.build()).state(NodeState.RUNNING).build());
}
}

View File

@ -19,6 +19,7 @@
package org.jclouds.glesys.compute.internal; package org.jclouds.glesys.compute.internal;
import java.net.URI; import java.net.URI;
import java.util.Map;
import java.util.Properties; import java.util.Properties;
import org.jclouds.compute.ComputeService; import org.jclouds.compute.ComputeService;
@ -31,6 +32,7 @@ import org.jclouds.logging.config.NullLoggingModule;
import org.jclouds.rest.BaseRestClientExpectTest; import org.jclouds.rest.BaseRestClientExpectTest;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.inject.AbstractModule; import com.google.inject.AbstractModule;
@ -51,8 +53,7 @@ public abstract class BaseGleSYSComputeServiceExpectTest extends BaseRestClientE
@Override @Override
public ComputeService createClient(Function<HttpRequest, HttpResponse> fn, Module module, Properties props) { public ComputeService createClient(Function<HttpRequest, HttpResponse> fn, Module module, Properties props) {
return new ComputeServiceContextFactory(setupRestProperties()).createContext(provider, identity, credential, return new ComputeServiceContextFactory(setupRestProperties()).createContext(provider, identity, credential,
ImmutableSet.<Module> of(new ExpectModule(fn), new NullLoggingModule(), module), props) ImmutableSet.<Module> of(new ExpectModule(fn), new NullLoggingModule(), module), props).getComputeService();
.getComputeService();
} }
protected PasswordProvider passwordGenerator() { protected PasswordProvider passwordGenerator() {
@ -65,28 +66,47 @@ public abstract class BaseGleSYSComputeServiceExpectTest extends BaseRestClientE
} }
protected Injector injectorForKnownArgumentsAndConstantPassword() { protected Injector injectorForKnownArgumentsAndConstantPassword() {
return computeContextForKnownArgumentsAndConstantPassword().utils().injector(); return injectorForKnownArgumentsAndConstantPassword(ImmutableMap.<HttpRequest, HttpResponse> of());
}
protected Injector injectorForKnownArgumentsAndConstantPassword(Map<HttpRequest, HttpResponse> requestsResponses) {
return computeContextForKnownArgumentsAndConstantPassword(requestsResponses).utils().injector();
}
protected ComputeServiceContext computeContextForKnownArgumentsAndConstantPassword(
Map<HttpRequest, HttpResponse> requestsResponses) {
return requestsSendResponses(
ImmutableMap
.<HttpRequest, HttpResponse> builder()
.put(HttpRequest
.builder()
.method("GET")
.endpoint(URI.create("https://api.glesys.com/server/templates/format/json"))
.headers(
ImmutableMultimap.<String, String> builder().put("Accept", "application/json")
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build()).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/server_templates.json"))
.build())
.put(HttpRequest
.builder()
.method("GET")
.endpoint(URI.create("https://api.glesys.com/server/allowedarguments/format/json"))
.headers(
ImmutableMultimap.<String, String> builder().put("Accept", "application/json")
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build()).build(),
HttpResponse.builder().statusCode(204)
.payload(payloadFromResource("/server_allowed_arguments.json")).build())
.putAll(requestsResponses).build(), new AbstractModule() {
@Override
protected void configure() {
bind(PasswordProvider.class).toInstance(passwordGenerator());
}
}).getContext();
} }
protected ComputeServiceContext computeContextForKnownArgumentsAndConstantPassword() { protected ComputeServiceContext computeContextForKnownArgumentsAndConstantPassword() {
return requestsSendResponses( return computeContextForKnownArgumentsAndConstantPassword(ImmutableMap.<HttpRequest, HttpResponse> of());
HttpRequest.builder().method("GET").endpoint(
URI.create("https://api.glesys.com/server/templates/format/json")).headers(
ImmutableMultimap.<String, String> builder().put("Accept", "application/json").put(
"Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build()).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/server_templates.json")).build(),
HttpRequest.builder().method("GET").endpoint(
URI.create("https://api.glesys.com/server/allowedarguments/format/json")).headers(
ImmutableMultimap.<String, String> builder().put("Accept", "application/json").put(
"Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build()).build(),
HttpResponse.builder().statusCode(204).payload(payloadFromResource("/server_allowed_arguments.json"))
.build(), new AbstractModule() {
@Override
protected void configure() {
bind(PasswordProvider.class).toInstance(passwordGenerator());
}
}).getContext();
} }
} }

View File

@ -42,7 +42,7 @@ public class GleSYSTemplateOptionsTest {
@Test @Test
public void testDefaultip() { public void testDefaultip() {
TemplateOptions options = new GleSYSTemplateOptions(); TemplateOptions options = new GleSYSTemplateOptions();
assertEquals(options.as(GleSYSTemplateOptions.class).getIp(), null); assertEquals(options.as(GleSYSTemplateOptions.class).getIp(), "any");
} }
@Test @Test

View File

@ -30,8 +30,8 @@ import org.jclouds.glesys.domain.EmailOverview;
import org.jclouds.glesys.domain.EmailOverviewDomain; import org.jclouds.glesys.domain.EmailOverviewDomain;
import org.jclouds.glesys.internal.BaseGleSYSClientLiveTest; import org.jclouds.glesys.internal.BaseGleSYSClientLiveTest;
import org.jclouds.glesys.options.CreateAccountOptions; import org.jclouds.glesys.options.CreateAccountOptions;
import org.jclouds.glesys.options.EditAccountOptions;
import org.jclouds.glesys.options.DestroyServerOptions; import org.jclouds.glesys.options.DestroyServerOptions;
import org.jclouds.glesys.options.EditAccountOptions;
import org.jclouds.predicates.RetryablePredicate; import org.jclouds.predicates.RetryablePredicate;
import org.testng.annotations.AfterGroups; import org.testng.annotations.AfterGroups;
import org.testng.annotations.BeforeGroups; import org.testng.annotations.BeforeGroups;

View File

@ -146,19 +146,19 @@ public class ServerClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
.put("Accept", "application/json") .put("Accept", "application/json")
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build()) .put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder() .payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
.put("serverid", "server1ssg-1.1").build())).build(), .put("serverid", "xm3276891").build())).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/server_details.json")).build()).getServerClient(); HttpResponse.builder().statusCode(200).payload(payloadFromResource("/server_details.json")).build()).getServerClient();
ServerDetails actual = client.getServerDetails("server1ssg-1.1"); ServerDetails actual = client.getServerDetails("xm3276891");
assertEquals(actual.toString(), expectedServerDetails().toString()); assertEquals(actual.toString(), expectedServerDetails().toString());
} }
private ServerDetails expectedServerDetails() { public static ServerDetails expectedServerDetails() {
Ip ip = Ip.builder().version4().ip("31.192.226.45").cost(2.0).build(); Ip ip = Ip.builder().version4().ip("109.74.10.45").cost(2.0).build();
Cost cost = Cost.builder().amount(6.38).currency("EUR").timePeriod("month").build(); Cost cost = Cost.builder().amount(13.22).currency("EUR").timePeriod("month").build();
return ServerDetails.builder().id("vz1375882").transferGB(50).hostname("jclouds-unit").cpuCores(1).memorySizeMB(128) return ServerDetails.builder().id("xm3276891").transferGB(50).hostname("glesys-s-6dd").cpuCores(1).memorySizeMB(512)
.diskSizeGB(5).description("unit test server").datacenter("Falkenberg").platform("OpenVZ") .diskSizeGB(5).description("glesys-s-6dd").datacenter("Falkenberg").platform("Xen")
.templateName("Debian 6.0 64-bit").cost(cost).ips(ip).build(); .templateName("Ubuntu 11.04 x64").cost(cost).ips(ip).build();
} }
@Test @Test
@ -169,10 +169,10 @@ public class ServerClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
.put("Accept", "application/json") .put("Accept", "application/json")
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build()) .put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder() .payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
.put("serverid", "server111").build())).build(), .put("serverid", "xm3276891").build())).build(),
HttpResponse.builder().statusCode(404).build()).getServerClient(); HttpResponse.builder().statusCode(404).build()).getServerClient();
assertNull(client.getServerDetails("server111")); assertNull(client.getServerDetails("xm3276891"));
} }
@Test @Test
@ -243,10 +243,10 @@ public class ServerClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
.put("Accept", "application/json") .put("Accept", "application/json")
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build()) .put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder() .payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
.put("serverid", "server111").build())).build(), .put("serverid", "xm3276891").build())).build(),
HttpResponse.builder().statusCode(206).build()).getServerClient(); HttpResponse.builder().statusCode(206).build()).getServerClient();
client.editServer("server111"); client.editServer("xm3276891");
} }
@Test @Test
@ -257,7 +257,7 @@ public class ServerClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
.put("Accept", "application/json") .put("Accept", "application/json")
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build()) .put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder() .payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
.put("serverid", "server111") .put("serverid", "xm3276891")
.put("description", "Description-of-server") .put("description", "Description-of-server")
.put("disksize", "1") .put("disksize", "1")
.put("memorysize", "512") .put("memorysize", "512")
@ -269,7 +269,7 @@ public class ServerClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
EditServerOptions options = EditServerOptions options =
EditServerOptions.Builder.description("Description-of-server").diskSizeGB(1).memorySizeMB(512).cpuCores(1).hostname("jclouds-test"); EditServerOptions.Builder.description("Description-of-server").diskSizeGB(1).memorySizeMB(512).cpuCores(1).hostname("jclouds-test");
client.editServer("server111", options); client.editServer("xm3276891", options);
} }
@Test @Test
@ -280,11 +280,11 @@ public class ServerClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
.put("Accept", "application/json") .put("Accept", "application/json")
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build()) .put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder() .payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
.put("serverid", "server111") .put("serverid", "xm3276891")
.put("hostname", "hostname1").build())).build(), .put("hostname", "hostname1").build())).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/server_details.json")).build()).getServerClient(); HttpResponse.builder().statusCode(200).payload(payloadFromResource("/server_details.json")).build()).getServerClient();
assertEquals(client.cloneServer("server111", "hostname1"), expectedServerDetails()); assertEquals(client.cloneServer("xm3276891", "hostname1"), expectedServerDetails());
} }
@Test @Test
@ -295,7 +295,7 @@ public class ServerClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
.put("Accept", "application/json") .put("Accept", "application/json")
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build()) .put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder() .payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
.put("serverid", "server111") .put("serverid", "xm3276891")
.put("hostname", "hostname1") .put("hostname", "hostname1")
.put("description", "Description-of-server") .put("description", "Description-of-server")
.put("disksize", "1") .put("disksize", "1")
@ -304,7 +304,7 @@ public class ServerClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/server_details.json")).build()).getServerClient(); HttpResponse.builder().statusCode(200).payload(payloadFromResource("/server_details.json")).build()).getServerClient();
CloneServerOptions options = (CloneServerOptions) CloneServerOptions.Builder.description("Description-of-server").diskSizeGB(1).memorySizeMB(512).cpuCores(1); CloneServerOptions options = (CloneServerOptions) CloneServerOptions.Builder.description("Description-of-server").diskSizeGB(1).memorySizeMB(512).cpuCores(1);
assertEquals(client.cloneServer("server111", "hostname1", options), expectedServerDetails()); assertEquals(client.cloneServer("xm3276891", "hostname1", options), expectedServerDetails());
} }
@Test(expectedExceptions = {ResourceNotFoundException.class}) @Test(expectedExceptions = {ResourceNotFoundException.class})
@ -315,11 +315,11 @@ public class ServerClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
.put("Accept", "application/json") .put("Accept", "application/json")
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build()) .put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder() .payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
.put("serverid", "server111") .put("serverid", "xm3276891")
.put("hostname", "hostname1").build())).build(), .put("hostname", "hostname1").build())).build(),
HttpResponse.builder().statusCode(404).build()).getServerClient(); HttpResponse.builder().statusCode(404).build()).getServerClient();
client.cloneServer("server111", "hostname1"); client.cloneServer("xm3276891", "hostname1");
} }
public void testGetServerStatusWhenResponseIs2xx() throws Exception { public void testGetServerStatusWhenResponseIs2xx() throws Exception {
@ -329,11 +329,11 @@ public class ServerClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
.put("Accept", "application/json") .put("Accept", "application/json")
.put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build()) .put("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==").build())
.payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder() .payload(newUrlEncodedFormPayload(ImmutableMultimap.<String, String>builder()
.put("serverid", "server111").build())).build(), .put("serverid", "xm3276891").build())).build(),
HttpResponse.builder().statusCode(206).payload(payloadFromResource("/server_status.json")).build()) HttpResponse.builder().statusCode(206).payload(payloadFromResource("/server_status.json")).build())
.getServerClient(); .getServerClient();
assertEquals(client.getServerStatus("server111"), expectedServerStatus()); assertEquals(client.getServerStatus("xm3276891"), expectedServerStatus());
} }
public void testGetServerStatusWithOptsWhenResponseIs2xx() throws Exception { public void testGetServerStatusWithOptsWhenResponseIs2xx() throws Exception {
@ -539,9 +539,9 @@ public class ServerClientExpectTest extends BaseRestClientExpectTest<GleSYSClien
private ServerStatus expectedServerStatus() { private ServerStatus expectedServerStatus() {
ResourceUsage cpu = ResourceUsage.builder().unit("cores").max(1.0).usage(0.0).build(); ResourceUsage cpu = ResourceUsage.builder().unit("cores").max(1.0).usage(0.0).build();
ResourceUsage disk = ResourceUsage.builder().unit("MB").usage(371.0).max(5120).build(); ResourceUsage disk = ResourceUsage.builder().unit("GB").usage(0.0).max(5).build();
ResourceUsage memory = ResourceUsage.builder().unit("MB").usage(3.0).max(128).build(); ResourceUsage memory = ResourceUsage.builder().unit("MB").usage(0.0).max(512).build();
ServerUptime uptime = ServerUptime.builder().current(23).unit("seconds").build(); ServerUptime uptime = ServerUptime.builder().current(0).unit("seconds").build();
return ServerStatus.builder().state(Server.State.RUNNING).uptime(uptime). return ServerStatus.builder().state(Server.State.RUNNING).uptime(uptime).
cpu(cpu).disk(disk).memory(memory).build(); cpu(cpu).disk(disk).memory(memory).build();
} }

View File

@ -1 +1 @@
{"response":{"status":{"code":"200","text":"OK"},"server":{"serverid":"vz1375882","hostname":"jclouds-unit","description":"unit test server","cpucores":"1","memorysize":"128","disksize":"5","transfer":"50","templatename":"Debian 6.0 64-bit","datacenter":"Falkenberg","managedhosting":"no","platform":"OpenVZ","cost":{"amount":6.38,"currency":"EUR","timeperiod":"month"},"iplist":[{"ip":"31.192.226.45","version":"4","cost":"2.00"}]},"debug":{"input":{"serverid":"vz1375882"}}}} {"response":{"status":{"code":200,"timestamp":"2012-02-10T11:11:05+01:00","text":"OK"},"server":{"serverid":"xm3276891","hostname":"glesys-s-6dd","description":"glesys-s-6dd","cpucores":1,"memorysize":512,"disksize":5,"transfer":50,"templatename":"Ubuntu 11.04 x64","datacenter":"Falkenberg","managedhosting":"no","platform":"Xen","cost":{"amount":13.22,"currency":"EUR","timeperiod":"month"},"iplist":[{"ipaddress":"109.74.10.45","version":4,"cost":2,"currency":"EUR"}]},"debug":{"input":{"serverid":"xm3276891"}}}}

View File

@ -1 +1 @@
{"response":{"status":{"code":200,"text":"OK"},"server":{"state":"running","cpu":{"usage":0,"max":1,"unit":"cores"},"memory":{"usage":3,"max":128,"unit":"MB"},"disk":{"usage":371,"max":5120,"unit":"MB"},"transfer":{"usage":0,"max":50,"unit":"GB last 30 days"},"uptime":{"current":23,"unit":"seconds"}},"debug":{"input":{"serverid":"vz1952928"}}}} {"response":{"status":{"code":200,"timestamp":"2012-02-10T11:21:50+01:00","text":"OK"},"server":{"state":"running","cpu":{"usage":0,"max":1,"unit":"cores"},"memory":{"usage":null,"max":512,"unit":"MB"},"disk":{"usage":null,"max":5,"unit":"GB"},"transfer":{"usage":0,"max":50,"unit":"GB last 30 days"},"uptime":{"current":null,"unit":"seconds"}},"debug":{"input":{"serverid":"xm3276891"}}}}