Repository: jclouds Updated Branches: refs/heads/gsoc2016-ivan 81e348561 -> 0b877b303
Add support for ProfitBricks Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/0b877b30 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/0b877b30 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/0b877b30 Branch: refs/heads/gsoc2016-ivan Commit: 0b877b30307cbab011b658a43da8d5f3f55a6e7a Parents: 81e3485 Author: Iván Lomba <[email protected]> Authored: Sat Aug 13 19:32:54 2016 +0200 Committer: Ignasi Barrera <[email protected]> Committed: Tue Aug 16 02:42:41 2016 +0200 ---------------------------------------------------------------------- .../ArbitraryCpuRamTemplateBuilderImpl.java | 25 +++-- .../compute/util/AutomaticHardwareIdSpec.java | 34 +++++- .../ArbitraryCpuRamTemplateBuilderImplTest.java | 108 +++++++++++++++---- .../internal/BaseComputeServiceLiveTest.java | 4 +- .../internal/BaseTemplateBuilderLiveTest.java | 2 +- .../util/AutomaticHardwareIdSpecTest.java | 43 +++++++- ...ngineArbitraryCpuRamTemplateBuilderImpl.java | 4 +- .../GoogleComputeEngineServiceLiveTest.java | 4 +- ...eArbitraryCpuRamTemplateBuilderImplTest.java | 34 +++--- ...ProfitBricksComputeServiceContextModule.java | 4 + .../ProfitBricksComputeServiceLiveTest.java | 38 +++++++ 11 files changed, 240 insertions(+), 60 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/0b877b30/compute/src/main/java/org/jclouds/compute/domain/internal/ArbitraryCpuRamTemplateBuilderImpl.java ---------------------------------------------------------------------- diff --git a/compute/src/main/java/org/jclouds/compute/domain/internal/ArbitraryCpuRamTemplateBuilderImpl.java b/compute/src/main/java/org/jclouds/compute/domain/internal/ArbitraryCpuRamTemplateBuilderImpl.java index f99b991..db7fcd3 100644 --- a/compute/src/main/java/org/jclouds/compute/domain/internal/ArbitraryCpuRamTemplateBuilderImpl.java +++ b/compute/src/main/java/org/jclouds/compute/domain/internal/ArbitraryCpuRamTemplateBuilderImpl.java @@ -16,6 +16,7 @@ */ package org.jclouds.compute.domain.internal; +import com.google.common.base.Optional; import com.google.common.base.Supplier; import org.jclouds.collect.Memoized; import org.jclouds.compute.domain.Hardware; @@ -46,9 +47,13 @@ public class ArbitraryCpuRamTemplateBuilderImpl extends TemplateBuilderImpl { super(locations, images, hardwares, defaultLocation, optionsProvider, defaultTemplateProvider); } - protected Hardware automaticHardwareForCpuAndRam(double cores, int ram) { - return new HardwareBuilder() - .id(automaticHardwareIdSpecBuilder(cores, ram).toString()) + protected Hardware automaticHardware(double cores, int ram, Optional<Float> diskSize) { + HardwareBuilder builder = new HardwareBuilder(); + if (diskSize.isPresent() && diskSize.get() > 0.0f) { + builder.volume(new VolumeImpl(diskSize.get(), true, true)); + } + return builder + .id(automaticHardwareIdSpecBuilder(cores, ram, diskSize).toString()) .ram(ram) .processor(new Processor(cores, 1.0)) .build(); @@ -60,24 +65,24 @@ public class ArbitraryCpuRamTemplateBuilderImpl extends TemplateBuilderImpl { } catch (NoSuchElementException ex) { if (isAutomaticId(hardwareId)) { AutomaticHardwareIdSpec spec = parseId(hardwareId); - return automaticHardwareForCpuAndRam(spec.getCores(), spec.getRam()); + return automaticHardware(spec.getCores(), spec.getRam(), spec.getDisk()); } else { throw ex; } - } - } + } + } protected Hardware resolveHardware(Set<? extends Hardware> hardwarel, final Iterable<? extends Image> images) { try { return super.resolveHardware(hardwarel, images); } catch (NoSuchElementException ex) { - if (super.minCores != 0 && super.minRam != 0) { - return automaticHardwareForCpuAndRam(minCores, minRam); + if (minCores <= 0 || minRam == 0 || minDisk < 0) { + throw new IllegalArgumentException("No hardware profile matching the given criteria was found. If you" + + " want to use exact values, please set the minCores, minRam and minDisk to positive values."); } - else throw new IllegalArgumentException("No hardware profile matching the given criteria was found. If " + - "you want to use exact values, please set the minCores and minRam values", ex); + return automaticHardware(minCores, minRam, minDisk == 0 ? Optional.<Float>absent() : Optional.of((float)minDisk)); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/0b877b30/compute/src/main/java/org/jclouds/compute/util/AutomaticHardwareIdSpec.java ---------------------------------------------------------------------- diff --git a/compute/src/main/java/org/jclouds/compute/util/AutomaticHardwareIdSpec.java b/compute/src/main/java/org/jclouds/compute/util/AutomaticHardwareIdSpec.java index 6aaa44a..986f24b 100644 --- a/compute/src/main/java/org/jclouds/compute/util/AutomaticHardwareIdSpec.java +++ b/compute/src/main/java/org/jclouds/compute/util/AutomaticHardwareIdSpec.java @@ -16,6 +16,7 @@ */ package org.jclouds.compute.util; +import com.google.common.base.Optional; import com.google.common.base.Splitter; import java.util.Map; @@ -24,6 +25,7 @@ public class AutomaticHardwareIdSpec { private double cores; private int ram; + private Optional<Float> disk = Optional.absent(); public static boolean isAutomaticId(String id) { return id.startsWith("automatic:"); @@ -41,17 +43,30 @@ public class AutomaticHardwareIdSpec { throw new IllegalArgumentException(String.format("Omitted keys on hardwareId: %s. Please set number " + "of cores and ram amount.", hardwareId)); } + if (specValues.containsKey("disk")) { + float disk = Float.parseFloat(specValues.get("disk")); + if (disk > 0.0f) { + spec.disk = Optional.of(disk); + } + else { + throw new IllegalArgumentException(String.format("Invalid disk value: %s", hardwareId)); + } + } spec.ram = Integer.parseInt(specValues.get("ram")); spec.cores = Double.parseDouble(specValues.get("cores")); return spec; } - public static AutomaticHardwareIdSpec automaticHardwareIdSpecBuilder(double cores, int ram) { + public static AutomaticHardwareIdSpec automaticHardwareIdSpecBuilder(double cores, int ram, Optional<Float> disk) { AutomaticHardwareIdSpec spec = new AutomaticHardwareIdSpec(); - if (cores == 0 || ram == 0) { - throw new IllegalArgumentException(String.format("Omitted or wrong minCores and minRam. If you" + - " want to use exact values, please set the minCores and minRam values.")); + if (cores <= 0 || ram == 0) { + throw new IllegalArgumentException(String.format("Omitted or wrong minCores and minRam. If you want to" + + " use exact values, please set the minCores and minRam values: cores=%s, ram=%s", cores, ram)); + } + if (disk.isPresent() && disk.get() <= 0.0f) { + throw new IllegalArgumentException(String.format("Invalid disk value: %.0f", disk.get())); } + spec.disk = disk; spec.cores = cores; spec.ram = ram; return spec; @@ -59,7 +74,12 @@ public class AutomaticHardwareIdSpec { @Override public String toString() { - return String.format("automatic:cores=%s;ram=%s", cores, ram); + if (disk.isPresent()) { + return String.format("automatic:cores=%s;ram=%s;disk=%.0f", cores, ram, disk.get().floatValue()); + } + else { + return String.format("automatic:cores=%s;ram=%s", cores, ram); + } } public double getCores() { @@ -69,4 +89,8 @@ public class AutomaticHardwareIdSpec { public int getRam() { return ram; } + + public Optional<Float> getDisk() { + return disk; + } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/0b877b30/compute/src/test/java/org/jclouds/compute/domain/internal/ArbitraryCpuRamTemplateBuilderImplTest.java ---------------------------------------------------------------------- diff --git a/compute/src/test/java/org/jclouds/compute/domain/internal/ArbitraryCpuRamTemplateBuilderImplTest.java b/compute/src/test/java/org/jclouds/compute/domain/internal/ArbitraryCpuRamTemplateBuilderImplTest.java index 568a60b..b538124 100644 --- a/compute/src/test/java/org/jclouds/compute/domain/internal/ArbitraryCpuRamTemplateBuilderImplTest.java +++ b/compute/src/test/java/org/jclouds/compute/domain/internal/ArbitraryCpuRamTemplateBuilderImplTest.java @@ -90,8 +90,8 @@ public class ArbitraryCpuRamTemplateBuilderImplTest { .uri(URI.create("uri")) .build(); - private final String errorMessage = "No hardware profile matching the given criteria was found. " + - "If you want to use exact values, please set the minCores and minRam values"; + private final String errorMessage = "No hardware profile matching the given criteria was found. If you want to use" + + " exact values, please set the minCores, minRam and minDisk to positive values."; @Test public void testAutoGeneratedHardwareFromId(){ @@ -111,14 +111,20 @@ public class ArbitraryCpuRamTemplateBuilderImplTest { TemplateBuilderImpl templateBuilder = new ArbitraryCpuRamTemplateBuilderImpl(locations, new ImageCacheSupplier(images, 60, - Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, - Suppliers.ofInstance(region), - optionsProvider, templateBuilderProvider); + Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, + Suppliers.ofInstance(region), + optionsProvider, templateBuilderProvider); Hardware hardware = templateBuilder.hardwareId("automatic:cores=2;ram=256").build().getHardware(); assertThat(hardware.getRam()).isEqualTo(256); assertThat(hardware.getProcessors()).extracting("cores").containsExactly(2.0); assertThat(hardware.getId()).isEqualTo("automatic:cores=2.0;ram=256"); + + Hardware hardware2 = templateBuilder.hardwareId("automatic:cores=2;ram=256;disk=100").build().getHardware(); + assertThat(hardware2.getRam()).isEqualTo(256); + assertThat(hardware2.getProcessors()).extracting("cores").containsExactly(2.0); + assertThat(hardware2.getId()).isEqualTo("automatic:cores=2.0;ram=256;disk=100"); + assertThat(hardware2.getVolumes().get(0).getSize()).isEqualTo(100); } @Test @@ -137,8 +143,8 @@ public class ArbitraryCpuRamTemplateBuilderImplTest { replay(defaultTemplate, optionsProvider, templateBuilderProvider, getImageStrategy); TemplateBuilderImpl templateBuilder = new ArbitraryCpuRamTemplateBuilderImpl(locations, new ImageCacheSupplier(images, 60, - Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, - Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); + Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, + Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); templateBuilder.minRam(1024); templateBuilder.minCores(4); Template template = templateBuilder.build(); @@ -149,6 +155,62 @@ public class ArbitraryCpuRamTemplateBuilderImplTest { } @Test + public void testAutoGeneratedHardwareWithMinCoresMinRamAndMinDisk() { + Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>>ofInstance(ImmutableSet.of(region)); + Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>>ofInstance(ImmutableSet.of(image)); + Supplier<Set<? extends Hardware>> hardwares = Suppliers.<Set<? extends Hardware>>ofInstance(ImmutableSet + .<Hardware>of(hardware)); + Provider<TemplateOptions> optionsProvider = createMock(Provider.class); + Provider<TemplateBuilder> templateBuilderProvider = createMock(Provider.class); + TemplateBuilder defaultTemplate = createMock(TemplateBuilder.class); + GetImageStrategy getImageStrategy = createMock(GetImageStrategy.class); + + expect(optionsProvider.get()).andReturn(new TemplateOptions()); + expect(getImageStrategy.getImage(anyObject(String.class))).andReturn(null); + replay(defaultTemplate, optionsProvider, templateBuilderProvider, getImageStrategy); + TemplateBuilderImpl templateBuilder = new ArbitraryCpuRamTemplateBuilderImpl(locations, + new ImageCacheSupplier(images, 60, + Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, + Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); + templateBuilder.minCores(2); + templateBuilder.minRam(2048); + templateBuilder.minDisk(100); + Template template = templateBuilder.build(); + Hardware hardware = template.getHardware(); + assertThat(hardware.getRam()).isEqualTo(2048); + assertThat(hardware.getProcessors()).extracting("cores").containsExactly(2.0); + assertThat(hardware.getId()).isEqualTo("automatic:cores=2.0;ram=2048;disk=100"); + assertThat(hardware.getVolumes().get(0).getSize()).isEqualTo(100); + } + + @Test(expectedExceptions = IllegalArgumentException.class, + expectedExceptionsMessageRegExp = errorMessage) + public void testAutoGeneratedHardwareWithMinCoresMinRamAndInvalidMinDisk() { + Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>>ofInstance(ImmutableSet.of(region)); + Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>>ofInstance(ImmutableSet.of(image)); + Supplier<Set<? extends Hardware>> hardwares = Suppliers.<Set<? extends Hardware>>ofInstance(ImmutableSet + .<Hardware>of(hardware)); + Provider<TemplateOptions> optionsProvider = createMock(Provider.class); + Provider<TemplateBuilder> templateBuilderProvider = createMock(Provider.class); + TemplateBuilder defaultTemplate = createMock(TemplateBuilder.class); + GetImageStrategy getImageStrategy = createMock(GetImageStrategy.class); + + expect(optionsProvider.get()).andReturn(new TemplateOptions()); + expect(getImageStrategy.getImage(anyObject(String.class))).andReturn(null); + replay(defaultTemplate, optionsProvider, templateBuilderProvider, getImageStrategy); + TemplateBuilderImpl templateBuilder = new ArbitraryCpuRamTemplateBuilderImpl(locations, + new ImageCacheSupplier(images, 60, + Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, + Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); + templateBuilder.minCores(2); + templateBuilder.minRam(4096); + templateBuilder.minDisk(-100f); + Template template = templateBuilder.build(); + Hardware hardware = template.getHardware(); + assertThat(hardware.getId()).isEqualTo("automatic:cores=2.0;ram=4096;disk=-100"); + } + + @Test public void testExistingHardwareProfileMatchHardwareProfileWithMinCoresMinRam() { Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet .of(region)); @@ -165,8 +227,8 @@ public class ArbitraryCpuRamTemplateBuilderImplTest { replay(defaultTemplate, optionsProvider, templateBuilderProvider, getImageStrategy); TemplateBuilderImpl templateBuilder = new ArbitraryCpuRamTemplateBuilderImpl(locations, new ImageCacheSupplier(images, 60, - Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, - Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); + Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, + Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); templateBuilder.minCores(2); templateBuilder.minRam(1024); Template template = templateBuilder.build(); @@ -176,8 +238,9 @@ public class ArbitraryCpuRamTemplateBuilderImplTest { assertThat(hardware.getId()).isEqualTo("hardwareId"); } - @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = errorMessage) - public void testOnlyRamTest() { + @Test(expectedExceptions = IllegalArgumentException.class, + expectedExceptionsMessageRegExp = errorMessage) + public void testOnlyRam() { Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet.of(region)); Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.of(image)); Supplier<Set<? extends Hardware>> hardwares = Suppliers.<Set<? extends Hardware>> ofInstance(ImmutableSet @@ -192,14 +255,15 @@ public class ArbitraryCpuRamTemplateBuilderImplTest { replay(defaultTemplate, optionsProvider, templateBuilderProvider, getImageStrategy); TemplateBuilderImpl templateBuilder = new ArbitraryCpuRamTemplateBuilderImpl(locations, new ImageCacheSupplier(images, 60, - Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, - Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); + Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, + Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); templateBuilder.minRam(4096); templateBuilder.build(); } - @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = errorMessage) - public void testOnlyCoresTest() { + @Test(expectedExceptions = IllegalArgumentException.class, + expectedExceptionsMessageRegExp = errorMessage) + public void testOnlyCores() { Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet .of(region)); Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.of(image)); @@ -215,14 +279,14 @@ public class ArbitraryCpuRamTemplateBuilderImplTest { replay(defaultTemplate, optionsProvider, templateBuilderProvider, getImageStrategy); TemplateBuilderImpl templateBuilder = new ArbitraryCpuRamTemplateBuilderImpl(locations, new ImageCacheSupplier(images, 60, - Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, - Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); + Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, + Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); templateBuilder.minCores(4); templateBuilder.build(); } @Test - public void testOnlyRamMatchHardwareProfileTest() { + public void testOnlyRamMatchHardwareProfile() { Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet.of(region)); Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.of(image)); Supplier<Set<? extends Hardware>> hardwares = Suppliers.<Set<? extends Hardware>> ofInstance(ImmutableSet @@ -237,8 +301,8 @@ public class ArbitraryCpuRamTemplateBuilderImplTest { replay(defaultTemplate, optionsProvider, templateBuilderProvider, getImageStrategy); TemplateBuilderImpl templateBuilder = new ArbitraryCpuRamTemplateBuilderImpl(locations, new ImageCacheSupplier(images, 60, - Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, - Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); + Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, + Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); templateBuilder.minRam(1024); templateBuilder.build(); assertThat(hardware.getRam()).isEqualTo(2048); @@ -247,7 +311,7 @@ public class ArbitraryCpuRamTemplateBuilderImplTest { } @Test - public void testOnlyCoresMatchHardwareProfileTest() { + public void testOnlyCoresMatchHardwareProfile() { Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet .of(region)); Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.of(image)); @@ -263,7 +327,7 @@ public class ArbitraryCpuRamTemplateBuilderImplTest { replay(defaultTemplate, optionsProvider, templateBuilderProvider, getImageStrategy); TemplateBuilderImpl templateBuilder = new ArbitraryCpuRamTemplateBuilderImpl(locations, new ImageCacheSupplier(images, 60, - Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, + Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); templateBuilder.minCores(1); templateBuilder.build(); http://git-wip-us.apache.org/repos/asf/jclouds/blob/0b877b30/compute/src/test/java/org/jclouds/compute/internal/BaseComputeServiceLiveTest.java ---------------------------------------------------------------------- diff --git a/compute/src/test/java/org/jclouds/compute/internal/BaseComputeServiceLiveTest.java b/compute/src/test/java/org/jclouds/compute/internal/BaseComputeServiceLiveTest.java index d598e79..61ed6b0 100644 --- a/compute/src/test/java/org/jclouds/compute/internal/BaseComputeServiceLiveTest.java +++ b/compute/src/test/java/org/jclouds/compute/internal/BaseComputeServiceLiveTest.java @@ -953,12 +953,12 @@ public abstract class BaseComputeServiceLiveTest extends BaseComputeServiceConte Template template = buildTemplate(templateBuilder() .hardwareId("automatic:cores=2;ram=4096")); try { - NodeMetadata node = getOnlyElement(client.createNodesInGroup("custom", 1, template)); + NodeMetadata node = getOnlyElement(client.createNodesInGroup(group + "custom", 1, template)); assertThat(node.getHardware().getRam()).isEqualTo(4096); assertThat(node.getHardware().getProcessors().get(0).getCores()).isEqualTo(2); } finally { - client.destroyNodesMatching(inGroup("custom")); + client.destroyNodesMatching(inGroup(group + "custom")); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/0b877b30/compute/src/test/java/org/jclouds/compute/internal/BaseTemplateBuilderLiveTest.java ---------------------------------------------------------------------- diff --git a/compute/src/test/java/org/jclouds/compute/internal/BaseTemplateBuilderLiveTest.java b/compute/src/test/java/org/jclouds/compute/internal/BaseTemplateBuilderLiveTest.java index 5e27d5a..ecc0482 100644 --- a/compute/src/test/java/org/jclouds/compute/internal/BaseTemplateBuilderLiveTest.java +++ b/compute/src/test/java/org/jclouds/compute/internal/BaseTemplateBuilderLiveTest.java @@ -242,7 +242,7 @@ public abstract class BaseTemplateBuilderLiveTest extends BaseComputeServiceCont public void testAutoGeneratedHardwareFromId() { Template template = view.getComputeService().templateBuilder() .hardwareId("automatic:cores=2;ram=1024").build(); - assertThat(template.getHardware().getId()).isEqualTo("automatic:cores=2;ram=1024"); + assertThat(template.getHardware().getId()).isEqualTo("automatic:cores=2.0;ram=1024"); assertThat(template.getHardware().getRam()).isEqualTo(1024); assertThat(template.getHardware().getProcessors().get(0).getCores()).isEqualTo(2); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/0b877b30/compute/src/test/java/org/jclouds/compute/util/AutomaticHardwareIdSpecTest.java ---------------------------------------------------------------------- diff --git a/compute/src/test/java/org/jclouds/compute/util/AutomaticHardwareIdSpecTest.java b/compute/src/test/java/org/jclouds/compute/util/AutomaticHardwareIdSpecTest.java index 9dc72a2..90e3e4d 100644 --- a/compute/src/test/java/org/jclouds/compute/util/AutomaticHardwareIdSpecTest.java +++ b/compute/src/test/java/org/jclouds/compute/util/AutomaticHardwareIdSpecTest.java @@ -18,6 +18,8 @@ package org.jclouds.compute.util; import org.testng.annotations.Test; +import com.google.common.base.Optional; + import static org.assertj.core.api.Assertions.assertThat; @Test(groups = "unit", testName = "AutomaticHardwareIdSpecTest") @@ -37,16 +39,55 @@ public class AutomaticHardwareIdSpecTest { AutomaticHardwareIdSpec parser = AutomaticHardwareIdSpec.parseId("automatic:cores=2;ram=256"); assertThat(parser.getRam()).isEqualTo(256); assertThat(parser.getCores()).isEqualTo(2); + AutomaticHardwareIdSpec parser2 = AutomaticHardwareIdSpec.parseId("automatic:cores=2;ram=4096;disk=100"); + assertThat(parser2.getRam()).isEqualTo(4096); + assertThat(parser2.getCores()).isEqualTo(2); + assertThat(parser2.getDisk().get()).isEqualTo(100); } @Test(expectedExceptions = IllegalArgumentException.class) public void parseAutomaticIdMissingValuesTest() { - AutomaticHardwareIdSpec.parseId("automatic:cores=2"); + AutomaticHardwareIdSpec.parseId("automatic:cores=2"); + } + + @Test(expectedExceptions = IllegalArgumentException.class, + expectedExceptionsMessageRegExp = "Invalid disk value: automatic:cores=2;ram=4096;disk=-100") + public void parseAutomaticIdInvalidDiskTest() { + AutomaticHardwareIdSpec.parseId("automatic:cores=2;ram=4096;disk=-100"); } @Test public void generateAutomaticIdTest() { AutomaticHardwareIdSpec spec = AutomaticHardwareIdSpec.parseId("automatic:cores=2;ram=1024"); assertThat(spec.toString()).isEqualTo("automatic:cores=2.0;ram=1024"); + AutomaticHardwareIdSpec spec2 = AutomaticHardwareIdSpec.parseId("automatic:cores=2;ram=4096;disk=100"); + assertThat(spec2.toString()).isEqualTo("automatic:cores=2.0;ram=4096;disk=100"); + } + + @Test + public void automaticHardwareIdSpecBuilderTest() { + AutomaticHardwareIdSpec spec = AutomaticHardwareIdSpec.automaticHardwareIdSpecBuilder(2.0, 2048, Optional.<Float>absent()); + assertThat(spec.getCores()).isEqualTo(2.0); + assertThat(spec.getRam()).isEqualTo(2048); + assertThat(spec.toString()).isEqualTo("automatic:cores=2.0;ram=2048"); + AutomaticHardwareIdSpec spec2 = AutomaticHardwareIdSpec.automaticHardwareIdSpecBuilder(4.0, 4096, Optional.of(10.0f)); + assertThat(spec2.getCores()).isEqualTo(4.0); + assertThat(spec2.getRam()).isEqualTo(4096); + assertThat(spec2.getDisk().get()).isEqualTo(10); + assertThat(spec2.toString()).isEqualTo("automatic:cores=4.0;ram=4096;disk=10"); } + + @Test(expectedExceptions = IllegalArgumentException.class, + expectedExceptionsMessageRegExp = "Omitted or wrong minCores and minRam. If you want to" + + " use exact values, please set the minCores and minRam values: cores=2.0, ram=0") + public void automaticHardwareIdSpecBuilderWrongSpecsTest() { + AutomaticHardwareIdSpec.automaticHardwareIdSpecBuilder(2.0, 0, Optional.<Float>absent()); + } + + @Test(expectedExceptions = IllegalArgumentException.class, + expectedExceptionsMessageRegExp = "Invalid disk value: -10") + public void automaticHardwareIdSpecBuilderWrongDiskTest() { + AutomaticHardwareIdSpec.automaticHardwareIdSpecBuilder(2.0, 2048, Optional.of(-10.0f)); + } + } http://git-wip-us.apache.org/repos/asf/jclouds/blob/0b877b30/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/domain/internal/GoogleComputeEngineArbitraryCpuRamTemplateBuilderImpl.java ---------------------------------------------------------------------- diff --git a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/domain/internal/GoogleComputeEngineArbitraryCpuRamTemplateBuilderImpl.java b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/domain/internal/GoogleComputeEngineArbitraryCpuRamTemplateBuilderImpl.java index 774dce9..8d08950 100644 --- a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/domain/internal/GoogleComputeEngineArbitraryCpuRamTemplateBuilderImpl.java +++ b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/domain/internal/GoogleComputeEngineArbitraryCpuRamTemplateBuilderImpl.java @@ -16,6 +16,7 @@ */ package org.jclouds.googlecomputeengine.compute.domain.internal; +import com.google.common.base.Optional; import com.google.common.base.Supplier; import org.jclouds.collect.Memoized; import org.jclouds.compute.domain.Hardware; @@ -42,7 +43,8 @@ public class GoogleComputeEngineArbitraryCpuRamTemplateBuilderImpl extends Arbit super(locations, images, hardwares, defaultLocation, optionsProvider, defaultTemplateProvider); } - protected Hardware automaticHardwareForCpuAndRam(double cores, int ram) { + @Override + protected Hardware automaticHardware(double cores, int ram, Optional<Float> disk) { if (location == null) { location = defaultLocation.get(); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/0b877b30/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceLiveTest.java ---------------------------------------------------------------------- diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceLiveTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceLiveTest.java index d8bd28e..019fdd4 100644 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceLiveTest.java +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceLiveTest.java @@ -161,13 +161,13 @@ public class GoogleComputeEngineServiceLiveTest extends BaseComputeServiceLiveTe Template template = buildTemplate(templateBuilder() .hardwareId("automatic:cores=2;ram=4096")); try { - NodeMetadata node = getOnlyElement(client.createNodesInGroup("custom", 1, template)); + NodeMetadata node = getOnlyElement(client.createNodesInGroup(group + "custom", 1, template)); assertThat(node.getHardware().getRam()).isEqualTo(4096); assertThat(node.getHardware().getProcessors().get(0).getCores()).isEqualTo(2); assertThat(node.getHardware().getId()).isEqualTo(node.getLocation().getDescription() + "/machineTypes/custom-2-4096"); } finally { - client.destroyNodesMatching(inGroup("custom")); + client.destroyNodesMatching(inGroup(group + "custom")); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/0b877b30/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/domain/internal/GoogleComputeEngineArbitraryCpuRamTemplateBuilderImplTest.java ---------------------------------------------------------------------- diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/domain/internal/GoogleComputeEngineArbitraryCpuRamTemplateBuilderImplTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/domain/internal/GoogleComputeEngineArbitraryCpuRamTemplateBuilderImplTest.java index 98b3144..7754965 100644 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/domain/internal/GoogleComputeEngineArbitraryCpuRamTemplateBuilderImplTest.java +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/domain/internal/GoogleComputeEngineArbitraryCpuRamTemplateBuilderImplTest.java @@ -90,8 +90,8 @@ public class GoogleComputeEngineArbitraryCpuRamTemplateBuilderImplTest { .uri(URI.create("http://localhost/projects/party/zones/us-east-1/machineTypes/n2-standard-2")) .build(); - private final String errorMessage = "No hardware profile matching the given criteria was found. " + - "If you want to use exact values, please set the minCores and minRam values"; + private final String errorMessage = "No hardware profile matching the given criteria was found. If you want to use" + + " exact values, please set the minCores, minRam and minDisk to positive values."; @Test public void testAutoGeneratedHardwareFromIdTest(){ @@ -138,8 +138,8 @@ public class GoogleComputeEngineArbitraryCpuRamTemplateBuilderImplTest { replay(defaultTemplate, optionsProvider, templateBuilderProvider, getImageStrategy); TemplateBuilderImpl templateBuilder = new GoogleComputeEngineArbitraryCpuRamTemplateBuilderImpl(locations, new ImageCacheSupplier(images, 60, - Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, - Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); + Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, + Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); templateBuilder.minRam(4096); templateBuilder.minCores(2); Hardware hardware = templateBuilder.build().getHardware(); @@ -165,8 +165,8 @@ public class GoogleComputeEngineArbitraryCpuRamTemplateBuilderImplTest { replay(defaultTemplate, optionsProvider, templateBuilderProvider, getImageStrategy); TemplateBuilderImpl templateBuilder = new GoogleComputeEngineArbitraryCpuRamTemplateBuilderImpl(locations, new ImageCacheSupplier(images, 60, - Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, - Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); + Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, + Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); templateBuilder.minRam(1024); templateBuilder.minCores(2); Hardware hardware = templateBuilder.build().getHardware(); @@ -175,7 +175,8 @@ public class GoogleComputeEngineArbitraryCpuRamTemplateBuilderImplTest { assertThat(hardware.getId()).isEqualTo("http://localhost/projects/party/zones/us-east-1/machineTypes/n2-standard-2"); } - @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = errorMessage) + @Test(expectedExceptions = IllegalArgumentException.class, + expectedExceptionsMessageRegExp = errorMessage) public void testAutoGeneratedHardwareWithOnlyMinCoresTest() { Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet .of(region)); @@ -192,13 +193,14 @@ public class GoogleComputeEngineArbitraryCpuRamTemplateBuilderImplTest { replay(defaultTemplate, optionsProvider, templateBuilderProvider, getImageStrategy); TemplateBuilderImpl templateBuilder = new GoogleComputeEngineArbitraryCpuRamTemplateBuilderImpl(locations, new ImageCacheSupplier(images, 60, - Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, - Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); + Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, + Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); templateBuilder.minCores(4); templateBuilder.build().getHardware(); } - @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = errorMessage) + @Test(expectedExceptions = IllegalArgumentException.class, + expectedExceptionsMessageRegExp = errorMessage) public void testAutoGeneratedHardwareWithOnlyMinRamTest() { Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet .of(region)); @@ -215,8 +217,8 @@ public class GoogleComputeEngineArbitraryCpuRamTemplateBuilderImplTest { replay(defaultTemplate, optionsProvider, templateBuilderProvider, getImageStrategy); TemplateBuilderImpl templateBuilder = new GoogleComputeEngineArbitraryCpuRamTemplateBuilderImpl(locations, new ImageCacheSupplier(images, 60, - Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, - Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); + Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, + Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); templateBuilder.minRam(4096); templateBuilder.build().getHardware(); } @@ -238,8 +240,8 @@ public class GoogleComputeEngineArbitraryCpuRamTemplateBuilderImplTest { replay(defaultTemplate, optionsProvider, templateBuilderProvider, getImageStrategy); TemplateBuilderImpl templateBuilder = new GoogleComputeEngineArbitraryCpuRamTemplateBuilderImpl(locations, new ImageCacheSupplier(images, 60, - Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, - Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); + Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, + Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); templateBuilder.minCores(2); Hardware hardware = templateBuilder.build().getHardware(); assertThat(hardware.getRam()).isEqualTo(2048); @@ -265,8 +267,8 @@ public class GoogleComputeEngineArbitraryCpuRamTemplateBuilderImplTest { replay(defaultTemplate, optionsProvider, templateBuilderProvider, getImageStrategy); TemplateBuilderImpl templateBuilder = new GoogleComputeEngineArbitraryCpuRamTemplateBuilderImpl(locations, new ImageCacheSupplier(images, 60, - Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, - Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); + Atomics.<AuthorizationException>newReference(), Providers.of(getImageStrategy)), hardwares, + Suppliers.ofInstance(region), optionsProvider, templateBuilderProvider); templateBuilder.minRam(1024); Hardware hardware = templateBuilder.build().getHardware(); assertThat(hardware.getRam()).isEqualTo(2048); http://git-wip-us.apache.org/repos/asf/jclouds/blob/0b877b30/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java index abc732d..cd60bd7 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java @@ -37,6 +37,8 @@ import org.jclouds.compute.domain.Hardware; import org.jclouds.compute.domain.Image; import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Volume; +import org.jclouds.compute.domain.internal.ArbitraryCpuRamTemplateBuilderImpl; +import org.jclouds.compute.domain.internal.TemplateBuilderImpl; import org.jclouds.compute.strategy.CreateNodesInGroupThenAddToSet; import org.jclouds.domain.Location; import org.jclouds.functions.IdentityFunction; @@ -79,6 +81,8 @@ public class ProfitBricksComputeServiceContextModule extends bind(CreateNodesInGroupThenAddToSet.class).to(AssignDataCenterToTemplate.class).in(Scopes.SINGLETON); + bind(TemplateBuilderImpl.class).to(ArbitraryCpuRamTemplateBuilderImpl.class); + bind(new TypeLiteral<ComputeServiceAdapter<Server, Hardware, Provisionable, Location>>() { }).to(ProfitBricksComputeServiceAdapter.class); http://git-wip-us.apache.org/repos/asf/jclouds/blob/0b877b30/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceLiveTest.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceLiveTest.java b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceLiveTest.java index 0061090..c25f546 100644 --- a/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceLiveTest.java +++ b/providers/profitbricks/src/test/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceLiveTest.java @@ -18,6 +18,7 @@ package org.jclouds.profitbricks.compute; import org.jclouds.compute.domain.ExecResponse; import org.jclouds.compute.domain.NodeMetadata; +import org.jclouds.compute.domain.Template; import org.jclouds.compute.internal.BaseComputeServiceLiveTest; import org.jclouds.logging.config.LoggingModule; import org.jclouds.logging.slf4j.config.SLF4JLoggingModule; @@ -28,6 +29,10 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.inject.Module; +import static com.google.common.collect.Iterables.getOnlyElement; +import static org.assertj.core.api.Assertions.assertThat; +import static org.jclouds.compute.predicates.NodePredicates.inGroup; + @Test(groups = "live", singleThreaded = true, testName = "ProfitBricksComputeServiceLiveTest") public class ProfitBricksComputeServiceLiveTest extends BaseComputeServiceLiveTest { @@ -70,4 +75,37 @@ public class ProfitBricksComputeServiceLiveTest extends BaseComputeServiceLiveTe // Not enough description from API to match template } + @Override + @Test(dataProvider = "onlyIfAutomaticHardwareSupported", groups = {"integration", "live"}) + public void testCreateNodeWithCustomHardware() throws Exception { + Template template = buildTemplate(templateBuilder() + .hardwareId("automatic:cores=2;ram=2048;disk=10")); + try { + NodeMetadata node = getOnlyElement(client.createNodesInGroup(group + "custom", 1, template)); + assertThat(node.getHardware().getRam()).isEqualTo(2048); + assertThat(node.getHardware().getProcessors().get(0).getCores()).isEqualTo(2); + assertThat(node.getHardware().getVolumes().get(0).getSize()).isEqualTo(10); + assertThat(node.getHardware().getId()).isEqualTo("automatic:cores=2;ram=2048;disk=10"); + } + finally { + client.destroyNodesMatching(inGroup(group + "custom")); + } + } + + @Test(dataProvider = "onlyIfAutomaticHardwareSupported", groups = {"integration", "live"}) + public void testCreateNodeWithCustomHardwareUsingMins() throws Exception { + Template template = buildTemplate(templateBuilder() + .minCores(2).minRam(2048).minDisk(10)); + try { + NodeMetadata node = getOnlyElement(client.createNodesInGroup(group + "custom", 1, template)); + assertThat(node.getHardware().getRam()).isEqualTo(2048); + assertThat(node.getHardware().getProcessors().get(0).getCores()).isEqualTo(2); + assertThat(node.getHardware().getVolumes().get(0).getSize()).isEqualTo(10); + assertThat(node.getHardware().getId()).isEqualTo("cpu=2,ram=2048,disk=10"); + } + finally { + client.destroyNodesMatching(inGroup(group + "custom")); + } + } + }
