stable glesys

This commit is contained in:
Adrian Cole 2012-09-16 21:29:26 -07:00
parent 8ca0dc3c1d
commit 63f1d334f2
20 changed files with 152 additions and 96 deletions

View File

@ -36,10 +36,10 @@
<properties> <properties>
<test.glesys.endpoint>https://api.glesys.com</test.glesys.endpoint> <test.glesys.endpoint>https://api.glesys.com</test.glesys.endpoint>
<test.glesys.api-version>1</test.glesys.api-version> <test.glesys.api-version>1</test.glesys.api-version>
<test.glesys.build-version></test.glesys.build-version> <test.glesys.build-version>3.5.0</test.glesys.build-version>
<test.glesys.identity>FIXME</test.glesys.identity> <test.glesys.identity>FIXME</test.glesys.identity>
<test.glesys.credential>FIXME</test.glesys.credential> <test.glesys.credential>FIXME</test.glesys.credential>
<test.glesys.template></test.glesys.template> <test.glesys.template>osFamily=UBUNTU,osVersionMatches=1[012].[01][04],os64Bit=true,minRam=768</test.glesys.template>
<jclouds.osgi.export>org.jclouds.glesys*;version="${project.version}"</jclouds.osgi.export> <jclouds.osgi.export>org.jclouds.glesys*;version="${project.version}"</jclouds.osgi.export>
<jclouds.osgi.import>org.jclouds*;version="${project.version}",*</jclouds.osgi.import> <jclouds.osgi.import>org.jclouds*;version="${project.version}",*</jclouds.osgi.import>
</properties> </properties>

View File

@ -78,6 +78,7 @@ public class GleSYSApiMetadata extends BaseRestApiMetadata {
.credentialName("API Key") .credentialName("API Key")
.documentation(URI.create("https://customer.glesys.com/api.php")) .documentation(URI.create("https://customer.glesys.com/api.php"))
.version("1") .version("1")
.buildVersion("3.5.0")
.defaultEndpoint("https://api.glesys.com") .defaultEndpoint("https://api.glesys.com")
.defaultProperties(GleSYSApiMetadata.defaultProperties()) .defaultProperties(GleSYSApiMetadata.defaultProperties())
.view(TypeToken.of(ComputeServiceContext.class)) .view(TypeToken.of(ComputeServiceContext.class))

View File

@ -62,7 +62,7 @@ public class GleSYSProviderMetadata extends BaseProviderMetadata {
properties.setProperty(PROPERTY_ZONE + ".Falkenberg." + ISO3166_CODES, "SE-N"); properties.setProperty(PROPERTY_ZONE + ".Falkenberg." + ISO3166_CODES, "SE-N");
properties.setProperty(PROPERTY_ZONE + ".New York City." + ISO3166_CODES, "US-NY"); properties.setProperty(PROPERTY_ZONE + ".New York City." + ISO3166_CODES, "US-NY");
properties.setProperty(PROPERTY_ZONE + ".Stockholm." + ISO3166_CODES, "SE-AB"); properties.setProperty(PROPERTY_ZONE + ".Stockholm." + ISO3166_CODES, "SE-AB");
properties.setProperty(TEMPLATE, "minRam=512,osFamily=UBUNTU,hypervisorMatches=OpenVZ,osVersionMatches=1[012].[01][04],os64Bit=true,locationId=Falkenberg"); properties.setProperty(TEMPLATE, "osFamily=UBUNTU,osVersionMatches=1[012].[01][04],os64Bit=true,minRam=768");
return properties; return properties;
} }

View File

@ -20,8 +20,10 @@ package org.jclouds.glesys.compute;
import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import static org.jclouds.compute.util.ComputeServiceUtils.metadataAndTagsAsCommaDelimitedValue;
import static org.jclouds.concurrent.FutureIterables.transformParallel; import static org.jclouds.concurrent.FutureIterables.transformParallel;
import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
@ -47,6 +49,7 @@ import org.jclouds.compute.domain.internal.VolumeImpl;
import org.jclouds.compute.predicates.ImagePredicates; import org.jclouds.compute.predicates.ImagePredicates;
import org.jclouds.compute.reference.ComputeServiceConstants; import org.jclouds.compute.reference.ComputeServiceConstants;
import org.jclouds.compute.reference.ComputeServiceConstants.Timeouts; import org.jclouds.compute.reference.ComputeServiceConstants.Timeouts;
import org.jclouds.crypto.CryptoStreams;
import org.jclouds.domain.Location; import org.jclouds.domain.Location;
import org.jclouds.domain.LoginCredentials; import org.jclouds.domain.LoginCredentials;
import org.jclouds.glesys.GleSYSApi; import org.jclouds.glesys.GleSYSApi;
@ -64,7 +67,9 @@ import org.jclouds.logging.Logger;
import org.jclouds.predicates.RetryablePredicate; import org.jclouds.predicates.RetryablePredicate;
import org.jclouds.util.Iterables2; import org.jclouds.util.Iterables2;
import com.google.common.base.Charsets;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
@ -115,8 +120,12 @@ public class GleSYSComputeServiceAdapter implements ComputeServiceAdapter<Server
CreateServerOptions createServerOptions = new CreateServerOptions(); CreateServerOptions createServerOptions = new CreateServerOptions();
createServerOptions.ip(templateOptions.getIp()); createServerOptions.ip(templateOptions.getIp());
createServerOptions.description(name); // TODO: add to templateOptions and Map<String, String> md = metadataAndTagsAsCommaDelimitedValue(template.getOptions());
// set if present if (md.size() > 0) {
String description = Joiner.on('\n').withKeyValueSeparator("=").join(md);
// TODO: get glesys to stop stripping out equals and commas!
createServerOptions.description(CryptoStreams.hex(description.getBytes(Charsets.UTF_8)));
}
ServerSpec.Builder<?> builder = ServerSpec.builder(); ServerSpec.Builder<?> builder = ServerSpec.builder();
builder.datacenter(template.getLocation().getId()); builder.datacenter(template.getLocation().getId());

View File

@ -19,6 +19,9 @@
package org.jclouds.glesys.compute.functions; package org.jclouds.glesys.compute.functions;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.base.Strings.isNullOrEmpty;
import static org.jclouds.compute.util.ComputeServiceUtils.addMetadataAndParseTagsFromCommaDelimitedValue;
import java.util.Map; import java.util.Map;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
@ -42,15 +45,18 @@ import org.jclouds.compute.domain.Volume;
import org.jclouds.compute.domain.internal.VolumeImpl; import org.jclouds.compute.domain.internal.VolumeImpl;
import org.jclouds.compute.functions.GroupNamingConvention; import org.jclouds.compute.functions.GroupNamingConvention;
import org.jclouds.compute.reference.ComputeServiceConstants; import org.jclouds.compute.reference.ComputeServiceConstants;
import org.jclouds.crypto.CryptoStreams;
import org.jclouds.domain.Location; import org.jclouds.domain.Location;
import org.jclouds.glesys.domain.Ip; import org.jclouds.glesys.domain.Ip;
import org.jclouds.glesys.domain.ServerDetails; import org.jclouds.glesys.domain.ServerDetails;
import org.jclouds.logging.Logger; import org.jclouds.logging.Logger;
import org.jclouds.util.InetAddresses2.IsPrivateIPAddress; import org.jclouds.util.InetAddresses2.IsPrivateIPAddress;
import com.google.common.base.Charsets;
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.Splitter;
import com.google.common.base.Strings; 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;
@ -104,8 +110,15 @@ public class ServerDetailsToNodeMetadata implements Function<ServerDetails, Node
builder.name(from.getHostname()); builder.name(from.getHostname());
builder.hostname(from.getHostname()); builder.hostname(from.getHostname());
Location location = findLocationForServerDetails.apply(from); Location location = findLocationForServerDetails.apply(from);
assert (location != null) : String.format("no location matched ServerDetails %s", from); checkState(location != null, "no location matched ServerDetails %s", from);
builder.group(nodeNamingConvention.groupInUniqueNameOrNull(from.getDescription())); builder.group(nodeNamingConvention.groupInUniqueNameOrNull(from.getHostname()));
// TODO: get glesys to stop stripping out equals and commas!
if (!isNullOrEmpty(from.getDescription()) && from.getDescription().matches("^[0-9A-Fa-f]+$")) {
String decoded = new String(CryptoStreams.hex(from.getDescription()), Charsets.UTF_8);
addMetadataAndParseTagsFromCommaDelimitedValue(builder,
Splitter.on('\n').withKeyValueSeparator("=").split(decoded));
}
builder.imageId(from.getTemplateName() + ""); builder.imageId(from.getTemplateName() + "");
builder.operatingSystem(parseOperatingSystem(from)); builder.operatingSystem(parseOperatingSystem(from));
builder.hardware(new HardwareBuilder().ids(from.getId() + "").ram(from.getMemorySizeMB()) builder.hardware(new HardwareBuilder().ids(from.getId() + "").ram(from.getMemorySizeMB())

View File

@ -30,6 +30,7 @@ import org.jclouds.glesys.domain.EmailOverview;
import org.jclouds.glesys.options.CreateAccountOptions; import org.jclouds.glesys.options.CreateAccountOptions;
import org.jclouds.glesys.options.UpdateAccountOptions; import org.jclouds.glesys.options.UpdateAccountOptions;
import org.jclouds.http.filters.BasicAuthentication; import org.jclouds.http.filters.BasicAuthentication;
import org.jclouds.http.functions.ReturnTrueOn404;
import org.jclouds.rest.annotations.ExceptionParser; import org.jclouds.rest.annotations.ExceptionParser;
import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.SelectJson; import org.jclouds.rest.annotations.SelectJson;
@ -121,6 +122,7 @@ public interface EmailAccountAsyncApi {
*/ */
@POST @POST
@Path("/email/delete/format/json") @Path("/email/delete/format/json")
@ExceptionParser(ReturnTrueOn404.class)
ListenableFuture<Boolean> delete(@FormParam("email") String accountAddress); ListenableFuture<Boolean> delete(@FormParam("email") String accountAddress);
} }

View File

@ -42,6 +42,10 @@ public class GleSYSTypeAdapters {
@Override @Override
public Server.State read(JsonReader reader) throws IOException { public Server.State read(JsonReader reader) throws IOException {
if (reader.peek() == JsonToken.NULL) {
reader.nextNull();
return Server.State.UNRECOGNIZED;
}
return Server.State.fromValue(reader.nextString()); return Server.State.fromValue(reader.nextString());
} }
} }

View File

@ -56,12 +56,16 @@ public class GleSYSErrorHandler implements HttpErrorHandler {
exception = new AuthorizationException(message, exception); exception = new AuthorizationException(message, exception);
break; break;
case 400: case 400:
if (message.indexOf("Could not find") != -1) { if (message.indexOf("not find") != -1) {
exception = new ResourceNotFoundException(message, exception); exception = new ResourceNotFoundException(message, exception);
} }
break; break;
case 404: case 404:
if (message.indexOf("Not supported") != -1) {
exception = new UnsupportedOperationException(message, exception);
} else {
exception = new ResourceNotFoundException(message, exception); exception = new ResourceNotFoundException(message, exception);
}
break; break;
case 500: case 500:
if (message.indexOf("Locked") != -1) { if (message.indexOf("Locked") != -1) {

View File

@ -70,8 +70,8 @@ public class GleSYSTemplateBuilderLiveTest extends BaseTemplateBuilderLiveTest {
return input.version.equals("") || input.version.equals("5") || input.version.equals("5.5") return input.version.equals("") || input.version.equals("5") || input.version.equals("5.5")
|| input.version.equals("5.0") || input.version.equals("6.0"); || input.version.equals("5.0") || input.version.equals("6.0");
case WINDOWS: case WINDOWS:
return input.version.equals("") || input.version.equals("2008") return (input.version.equals("") || input.version.equals("2008")
|| (input.version.equals("2008 R2") && input.is64Bit); || input.version.equals("2008 R2")) && input.is64Bit;
default: default:
return false; return false;
} }
@ -83,13 +83,13 @@ public class GleSYSTemplateBuilderLiveTest extends BaseTemplateBuilderLiveTest {
@Test @Test
public void testDefaultTemplateBuilder() throws IOException { public void testDefaultTemplateBuilder() throws IOException {
Template defaultTemplate = view.getComputeService().templateBuilder().build(); Template defaultTemplate = view.getComputeService().templateBuilder().build();
assertEquals(defaultTemplate.getImage().getId(), "Ubuntu 12.04 LTS 64-bit"); assertEquals(defaultTemplate.getImage().getId(), "Ubuntu 12.04 x64");
assertEquals(defaultTemplate.getImage().getOperatingSystem().getVersion(), "12.04"); assertEquals(defaultTemplate.getImage().getOperatingSystem().getVersion(), "12.04");
assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true); assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true);
assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU); assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU);
assertEquals(getCores(defaultTemplate.getHardware()), 1.0d); assertEquals(getCores(defaultTemplate.getHardware()), 1.0d);
assertEquals(defaultTemplate.getHardware().getRam(), 512); assertEquals(defaultTemplate.getHardware().getRam(), 768);
assertEquals(defaultTemplate.getHardware().getHypervisor(), "OpenVZ"); assertEquals(defaultTemplate.getHardware().getHypervisor(), "Xen");
assertEquals(getSpace(defaultTemplate.getHardware()), 5.0d); assertEquals(getSpace(defaultTemplate.getHardware()), 5.0d);
assertEquals(defaultTemplate.getHardware().getVolumes().get(0).getType(), Volume.Type.LOCAL); assertEquals(defaultTemplate.getHardware().getVolumes().get(0).getType(), Volume.Type.LOCAL);
// test that we bound the correct templateoptions in guice // test that we bound the correct templateoptions in guice

View File

@ -79,9 +79,9 @@ public class ServerDetailsToNodeMetadataTest extends BaseGleSYSComputeServiceExp
actual.toString(), actual.toString(),
new NodeMetadataBuilder() new NodeMetadataBuilder()
.ids("vz1840356") .ids("vz1840356")
.name("test-email-jclouds") .name("glesys-s")
.hostname("test-email-jclouds") .hostname("glesys-s")
.group("glesys-s") .group("glesys")
.imageId("Ubuntu 10.04 LTS 32-bit") .imageId("Ubuntu 10.04 LTS 32-bit")
.operatingSystem( .operatingSystem(
OperatingSystem.builder().name("Ubuntu 10.04 LTS 32-bit").family(OsFamily.UBUNTU).version("10.04") OperatingSystem.builder().name("Ubuntu 10.04 LTS 32-bit").family(OsFamily.UBUNTU).version("10.04")

View File

@ -29,7 +29,7 @@ import org.jclouds.glesys.domain.ArchiveAllowedArguments;
import org.jclouds.glesys.internal.BaseGleSYSApiLiveTest; import org.jclouds.glesys.internal.BaseGleSYSApiLiveTest;
import org.jclouds.predicates.RetryablePredicate; import org.jclouds.predicates.RetryablePredicate;
import org.testng.annotations.AfterClass; import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeGroups; import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
@ -42,7 +42,7 @@ import com.google.common.base.Predicate;
@Test(groups = "live", testName = "ArchiveApiLiveTest", singleThreaded = true) @Test(groups = "live", testName = "ArchiveApiLiveTest", singleThreaded = true)
public class ArchiveApiLiveTest extends BaseGleSYSApiLiveTest { public class ArchiveApiLiveTest extends BaseGleSYSApiLiveTest {
@BeforeGroups(groups = {"live"}) @BeforeClass(groups = { "integration", "live" })
public void setupContext() { public void setupContext() {
super.setupContext(); super.setupContext();

View File

@ -31,8 +31,8 @@ import org.jclouds.glesys.internal.BaseGleSYSApiLiveTest;
import org.jclouds.glesys.options.DomainOptions; import org.jclouds.glesys.options.DomainOptions;
import org.jclouds.glesys.options.UpdateRecordOptions; import org.jclouds.glesys.options.UpdateRecordOptions;
import org.jclouds.predicates.RetryablePredicate; import org.jclouds.predicates.RetryablePredicate;
import org.testng.annotations.AfterGroups; import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeGroups; import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
@ -46,7 +46,7 @@ import com.google.common.base.Predicate;
public class DomainApiLiveTest extends BaseGleSYSApiLiveTest { public class DomainApiLiveTest extends BaseGleSYSApiLiveTest {
public String testDomain; public String testDomain;
@BeforeGroups(groups = {"live"}) @BeforeClass(groups = { "integration", "live" })
public void setupContext() { public void setupContext() {
super.setupContext(); super.setupContext();
testDomain = identity.toLowerCase() + "-domain.jclouds.org"; testDomain = identity.toLowerCase() + "-domain.jclouds.org";
@ -72,7 +72,7 @@ public class DomainApiLiveTest extends BaseGleSYSApiLiveTest {
createDomain(testDomain); createDomain(testDomain);
} }
@AfterGroups(groups = {"live"}) @AfterClass(groups = { "integration", "live" })
public void tearDownContext() { public void tearDownContext() {
int before = api.list().size(); int before = api.list().size();
api.delete(testDomain); api.delete(testDomain);

View File

@ -255,8 +255,7 @@ public class EmailAccountApiExpectTest extends BaseGleSYSApiExpectTest {
api.delete("test2@jclouds.org"); api.delete("test2@jclouds.org");
} }
@Test(expectedExceptions = {ResourceNotFoundException.class}) public void testDeleteWhenResponseIs4xxOk() throws Exception {
public void testDeleteWhenResponseIs4xxThrows() throws Exception {
EmailAccountApi api = requestSendsResponse( EmailAccountApi api = requestSendsResponse(
HttpRequest.builder().method("POST").endpoint("https://api.glesys.com/email/delete/format/json") HttpRequest.builder().method("POST").endpoint("https://api.glesys.com/email/delete/format/json")
.addHeader("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==") .addHeader("Authorization", "Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==")

View File

@ -29,12 +29,12 @@ import org.jclouds.glesys.domain.EmailAccount;
import org.jclouds.glesys.domain.EmailAlias; import org.jclouds.glesys.domain.EmailAlias;
import org.jclouds.glesys.domain.EmailOverview; import org.jclouds.glesys.domain.EmailOverview;
import org.jclouds.glesys.domain.EmailOverviewDomain; import org.jclouds.glesys.domain.EmailOverviewDomain;
import org.jclouds.glesys.internal.BaseGleSYSApiWithAServerLiveTest; import org.jclouds.glesys.internal.BaseGleSYSApiLiveTest;
import org.jclouds.glesys.options.CreateAccountOptions; import org.jclouds.glesys.options.CreateAccountOptions;
import org.jclouds.glesys.options.UpdateAccountOptions; import org.jclouds.glesys.options.UpdateAccountOptions;
import org.jclouds.predicates.RetryablePredicate; import org.jclouds.predicates.RetryablePredicate;
import org.testng.annotations.AfterGroups; import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeGroups; import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
@ -47,17 +47,22 @@ import com.google.common.collect.Iterables;
* @author Adam Lowe * @author Adam Lowe
*/ */
@Test(groups = "live", testName = "EmailAccountApiLiveTest", singleThreaded = true) @Test(groups = "live", testName = "EmailAccountApiLiveTest", singleThreaded = true)
public class EmailAccountApiLiveTest extends BaseGleSYSApiWithAServerLiveTest { public class EmailAccountApiLiveTest extends BaseGleSYSApiLiveTest {
public EmailAccountApiLiveTest() {
hostName = hostName + "-email";
}
@BeforeGroups(groups = {"live"}) @BeforeClass(groups = { "integration", "live" })
public void setupDomains() { @Override
testDomain = identity + ".test.jclouds.org"; public void setupContext() {
super.setupContext();
testDomain = hostName + ".test.jclouds.org";
api = gleContext.getApi().getEmailAccountApi(); api = gleContext.getApi().getEmailAccountApi();
deleteAll();
createDomain(testDomain); createDomain(testDomain);
emailAccountCounter = new RetryablePredicate<Integer>( emailAccountCounter = new RetryablePredicate<Integer>(new Predicate<Integer>() {
new Predicate<Integer>() {
public boolean apply(Integer value) { public boolean apply(Integer value) {
return api.listDomain(testDomain).size() == value; return api.listDomain(testDomain).size() == value;
} }
@ -65,18 +70,18 @@ public class EmailAccountApiLiveTest extends BaseGleSYSApiWithAServerLiveTest {
assertTrue(emailAccountCounter.apply(0)); assertTrue(emailAccountCounter.apply(0));
try {
api.delete("test2@" + testDomain);
} catch(Exception e) {
}
} }
@AfterGroups(groups = {"live"}) @AfterClass(groups = { "integration", "live" })
public void tearDownDomains() { @Override
public void tearDownContext() {
deleteAll();
super.tearDownContext();
}
private void deleteAll() {
api.delete("test@" + testDomain); api.delete("test@" + testDomain);
api.delete("test1@" + testDomain); api.delete("test1@" + testDomain);
assertTrue(emailAccountCounter.apply(0));
gleContext.getApi().getEmailAccountApi().delete(testDomain);
} }
private EmailAccountApi api; private EmailAccountApi api;
@ -85,8 +90,8 @@ public class EmailAccountApiLiveTest extends BaseGleSYSApiWithAServerLiveTest {
@Test @Test
public void testCreateEmail() { public void testCreateEmail() {
api.createWithPassword("test@" + testDomain, "password", api.createWithPassword("test@" + testDomain, "password", CreateAccountOptions.Builder.antiVirus(true)
CreateAccountOptions.Builder.antiVirus(true).autorespond(true).autorespondMessage("out of office")); .autorespond(true).autorespondMessage("out of office"));
assertTrue(emailAccountCounter.apply(1)); assertTrue(emailAccountCounter.apply(1));

View File

@ -29,8 +29,8 @@ import java.util.Set;
import org.jclouds.glesys.domain.IpDetails; import org.jclouds.glesys.domain.IpDetails;
import org.jclouds.glesys.internal.BaseGleSYSApiWithAServerLiveTest; import org.jclouds.glesys.internal.BaseGleSYSApiWithAServerLiveTest;
import org.jclouds.glesys.options.ListIpOptions; import org.jclouds.glesys.options.ListIpOptions;
import org.testng.annotations.AfterGroups; import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeMethod; import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.collect.FluentIterable; import com.google.common.collect.FluentIterable;
@ -44,17 +44,24 @@ import com.google.common.collect.Sets;
*/ */
@Test(groups = "live", testName = "IpApiLiveTest", singleThreaded = true) @Test(groups = "live", testName = "IpApiLiveTest", singleThreaded = true)
public class IpApiLiveTest extends BaseGleSYSApiWithAServerLiveTest { public class IpApiLiveTest extends BaseGleSYSApiWithAServerLiveTest {
public IpApiLiveTest() {
hostName = hostName + "-ip";
}
@BeforeMethod @BeforeClass(groups = { "integration", "live" })
public void setupApi() { @Override
public void setupContext() {
super.setupContext();
api = gleContext.getApi().getIpApi(); api = gleContext.getApi().getIpApi();
} }
@AfterGroups(groups = {"live"}) @AfterClass(groups = { "integration", "live" })
public void releaseIp() { @Override
public void tearDownContext() {
if (reservedIp != null) { if (reservedIp != null) {
api.release(reservedIp.getAddress()); api.release(reservedIp.getAddress());
} }
super.tearDownContext();
} }
private IpApi api; private IpApi api;
@ -185,7 +192,6 @@ public class IpApiLiveTest extends BaseGleSYSApiWithAServerLiveTest {
assertNull(removed.getServerId()); assertNull(removed.getServerId());
assertFalse(removed.isReserved()); assertFalse(removed.isReserved());
// reserve an address again! // reserve an address again!
reserveIp(); reserveIp();
} }

View File

@ -166,7 +166,7 @@ public class ServerApiExpectTest extends BaseGleSYSApiExpectTest {
public static ServerDetails expectedServerDetails() { public static ServerDetails expectedServerDetails() {
Ip ip = Ip.builder().version4().ip("31.192.231.254").version4().cost(2.0).currency("EUR").build(); Ip ip = Ip.builder().version4().ip("31.192.231.254").version4().cost(2.0).currency("EUR").build();
Cost cost = Cost.builder().amount(10.22).currency("EUR").timePeriod("month").build(); Cost cost = Cost.builder().amount(10.22).currency("EUR").timePeriod("month").build();
return ServerDetails.builder().id("vz1840356").transferGB(50).hostname("test-email-jclouds").cpuCores(1).memorySizeMB(512) return ServerDetails.builder().id("vz1840356").transferGB(50).hostname("glesys-s").cpuCores(1).memorySizeMB(512)
.diskSizeGB(5).datacenter("Falkenberg").description("glesys-s-6dd").platform("OpenVZ") .diskSizeGB(5).datacenter("Falkenberg").description("glesys-s-6dd").platform("OpenVZ")
.templateName("Ubuntu 10.04 LTS 32-bit").state(Server.State.RUNNING).cost(cost).ips(ip).build(); .templateName("Ubuntu 10.04 LTS 32-bit").state(Server.State.RUNNING).cost(cost).ips(ip).build();
} }

View File

@ -40,7 +40,8 @@ import org.jclouds.glesys.options.DestroyServerOptions;
import org.jclouds.glesys.options.ServerStatusOptions; import org.jclouds.glesys.options.ServerStatusOptions;
import org.jclouds.glesys.options.UpdateServerOptions; import org.jclouds.glesys.options.UpdateServerOptions;
import org.jclouds.predicates.RetryablePredicate; import org.jclouds.predicates.RetryablePredicate;
import org.testng.annotations.AfterGroups; import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod; import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@ -57,16 +58,21 @@ import com.google.common.collect.FluentIterable;
public class ServerApiLiveTest extends BaseGleSYSApiWithAServerLiveTest { public class ServerApiLiveTest extends BaseGleSYSApiWithAServerLiveTest {
public static final String testHostName2 = "jclouds-test2"; public static final String testHostName2 = "jclouds-test2";
@BeforeMethod @BeforeClass(groups = { "integration", "live" })
public void setupApi() { @Override
public void setupContext() {
hostName = hostName + "-server";
super.setupContext();
api = gleContext.getApi().getServerApi(); api = gleContext.getApi().getServerApi();
} }
@AfterGroups(groups = {"live"}) @AfterClass(groups = { "integration", "live" })
public void deleteExtraServer() { @Override
public void tearDownContext() {
if (testServerId2 != null) { if (testServerId2 != null) {
api.destroy(testServerId2, DestroyServerOptions.Builder.discardIp()); api.destroy(testServerId2, DestroyServerOptions.Builder.discardIp());
} }
super.tearDownContext();
} }
private ServerApi api; private ServerApi api;
@ -205,13 +211,20 @@ public class ServerApiLiveTest extends BaseGleSYSApiWithAServerLiveTest {
public void testResourceUsage() throws Exception { public void testResourceUsage() throws Exception {
// test server has only been in existence for less than a minute - check all servers // test server has only been in existence for less than a minute - check all servers
for (Server server : api.list()) { for (Server server : api.list()) {
try {
ResourceUsage usage = api.getResourceUsage(server.getId(), "diskioread", "minute"); ResourceUsage usage = api.getResourceUsage(server.getId(), "diskioread", "minute");
assertEquals(usage.getInfo().getResource(), "diskioread"); assertEquals(usage.getInfo().getResource(), "diskioread");
assertEquals(usage.getInfo().getResolution(), "minute"); assertEquals(usage.getInfo().getResolution(), "minute");
} catch (UnsupportedOperationException e) {
usage = api.getResourceUsage(server.getId(), "cpuusage", "minute"); }
try {
ResourceUsage usage = api.getResourceUsage(server.getId(), "cpuusage", "minute");
assertEquals(usage.getInfo().getResource(), "cpuusage"); assertEquals(usage.getInfo().getResource(), "cpuusage");
assertEquals(usage.getInfo().getResolution(), "minute"); assertEquals(usage.getInfo().getResolution(), "minute");
} catch (UnsupportedOperationException e) {
}
} }
} }

View File

@ -28,7 +28,7 @@ import org.jclouds.glesys.GleSYSAsyncApi;
import org.jclouds.glesys.features.DomainApi; import org.jclouds.glesys.features.DomainApi;
import org.jclouds.predicates.RetryablePredicate; import org.jclouds.predicates.RetryablePredicate;
import org.jclouds.rest.RestContext; import org.jclouds.rest.RestContext;
import org.testng.annotations.BeforeGroups; import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
@ -40,6 +40,7 @@ import com.google.common.base.Predicate;
*/ */
@Test(groups = "live") @Test(groups = "live")
public class BaseGleSYSApiLiveTest extends BaseComputeServiceContextLiveTest { public class BaseGleSYSApiLiveTest extends BaseComputeServiceContextLiveTest {
protected String hostName = System.getProperty("user.name").replace('.','-').toLowerCase();
protected RestContext<GleSYSApi, GleSYSAsyncApi> gleContext; protected RestContext<GleSYSApi, GleSYSAsyncApi> gleContext;
@ -47,7 +48,7 @@ public class BaseGleSYSApiLiveTest extends BaseComputeServiceContextLiveTest {
provider = "glesys"; provider = "glesys";
} }
@BeforeGroups(groups = { "integration", "live" }) @BeforeClass(groups = { "integration", "live" })
@Override @Override
public void setupContext() { public void setupContext() {
super.setupContext(); super.setupContext();

View File

@ -36,8 +36,8 @@ import org.jclouds.glesys.features.ServerApi;
import org.jclouds.glesys.options.DestroyServerOptions; import org.jclouds.glesys.options.DestroyServerOptions;
import org.jclouds.glesys.options.ServerStatusOptions; import org.jclouds.glesys.options.ServerStatusOptions;
import org.jclouds.predicates.RetryablePredicate; import org.jclouds.predicates.RetryablePredicate;
import org.testng.annotations.AfterGroups; import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeGroups; import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
@ -50,25 +50,24 @@ import com.google.common.base.Predicate;
@Test(groups = "live", singleThreaded = true) @Test(groups = "live", singleThreaded = true)
public class BaseGleSYSApiWithAServerLiveTest extends BaseGleSYSApiLiveTest { public class BaseGleSYSApiWithAServerLiveTest extends BaseGleSYSApiLiveTest {
protected String serverId; protected String serverId;
protected String hostName = "test-server-jclouds";
protected ServerStatusChecker serverStatusChecker; protected ServerStatusChecker serverStatusChecker;
public BaseGleSYSApiWithAServerLiveTest() { public BaseGleSYSApiWithAServerLiveTest() {
provider = "glesys"; provider = "glesys";
} }
@BeforeGroups(groups = { "integration", "live" }) @BeforeClass(groups = { "integration", "live" })
@Override @Override
public final void setupContext() { public void setupContext() {
assertNull(serverId, "This method should be called EXACTLY once per run"); assertNull(serverId, "This method should be called EXACTLY once per run");
super.setupContext(); super.setupContext();
serverStatusChecker = createServer(hostName); serverStatusChecker = createServer(hostName);
serverId = serverStatusChecker.getServerId(); serverId = serverStatusChecker.getServerId();
} }
@AfterGroups(groups = {"integration", "live"}) @AfterClass(groups = { "integration", "live" })
@Override @Override
public final void tearDownContext() { public void tearDownContext() {
gleContext.getApi().getServerApi().destroy(serverId, DestroyServerOptions.Builder.discardIp()); gleContext.getApi().getServerApi().destroy(serverId, DestroyServerOptions.Builder.discardIp());
super.tearDownContext(); super.tearDownContext();
} }
@ -98,7 +97,7 @@ public class BaseGleSYSApiWithAServerLiveTest extends BaseGleSYSApiLiveTest {
assertEquals(testServer.getHostname(), hostName); assertEquals(testServer.getHostname(), hostName);
assertFalse(testServer.getIps().isEmpty()); assertFalse(testServer.getIps().isEmpty());
ServerStatusChecker runningServerCounter = new ServerStatusChecker(api, testServer.getId(), 180, 10, ServerStatusChecker runningServerCounter = new ServerStatusChecker(api, testServer.getId(), 300, 10,
TimeUnit.SECONDS); TimeUnit.SECONDS);
assertTrue(runningServerCounter.apply(Server.State.RUNNING)); assertTrue(runningServerCounter.apply(Server.State.RUNNING));

View File

@ -1,7 +1,7 @@
{"response":{"status":{"code":200,"timestamp":"2012-06-21T14:10:57+02:00","text":"OK"}, {"response":{"status":{"code":200,"timestamp":"2012-06-21T14:10:57+02:00","text":"OK"},
"server":{ "server":{
"serverid":"vz1840356", "serverid":"vz1840356",
"hostname":"test-email-jclouds", "hostname":"glesys-s",
"description":"glesys-s-6dd", "description":"glesys-s-6dd",
"cpucores":1, "cpucores":1,
"memorysize":512, "memorysize":512,