diff --git a/labs/virtualbox/pom.xml b/labs/virtualbox/pom.xml index ecfa157bfd..5cce6e1562 100644 --- a/labs/virtualbox/pom.xml +++ b/labs/virtualbox/pom.xml @@ -102,6 +102,17 @@ 0.9.29 test + + org.testng + testng + 6.3.1 + + + snakeyaml + org.yaml + + + diff --git a/labs/virtualbox/src/main/java/org/jclouds/virtualbox/VirtualBoxPropertiesBuilder.java b/labs/virtualbox/src/main/java/org/jclouds/virtualbox/VirtualBoxPropertiesBuilder.java index 2225281d11..dc427b69b0 100644 --- a/labs/virtualbox/src/main/java/org/jclouds/virtualbox/VirtualBoxPropertiesBuilder.java +++ b/labs/virtualbox/src/main/java/org/jclouds/virtualbox/VirtualBoxPropertiesBuilder.java @@ -71,7 +71,12 @@ public class VirtualBoxPropertiesBuilder extends PropertiesBuilder { + "initrd=/install/initrd.gz -- "); properties.put(VIRTUALBOX_WORKINGDIR, System.getProperty("user.home") + File.separator - + System.getProperty("test.virtualbox.workingDir", "jclouds-virtualbox-test")); + + System.getProperty("test.virtualbox.workingDir", ".jclouds-virtualbox")); + + properties.put(VIRTUALBOX_IMAGES_DESCRIPTOR, + System.getProperty("user.home") + File.separator + + System.getProperty("test.virtualbox.image.descriptor.yaml", "images.yaml")); + properties.put(VIRTUALBOX_PRECONFIGURATION_URL, "http://10.0.2.2:8080/src/test/resources/preseed.cfg"); diff --git a/labs/virtualbox/src/main/java/org/jclouds/virtualbox/compute/VirtualBoxComputeServiceAdapter.java b/labs/virtualbox/src/main/java/org/jclouds/virtualbox/compute/VirtualBoxComputeServiceAdapter.java index 1b031d1370..738794b9b4 100644 --- a/labs/virtualbox/src/main/java/org/jclouds/virtualbox/compute/VirtualBoxComputeServiceAdapter.java +++ b/labs/virtualbox/src/main/java/org/jclouds/virtualbox/compute/VirtualBoxComputeServiceAdapter.java @@ -21,9 +21,10 @@ package org.jclouds.virtualbox.compute; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.collect.Iterables.filter; -import static com.google.common.collect.Iterables.transform; import static org.jclouds.virtualbox.config.VirtualBoxConstants.VIRTUALBOX_IMAGE_PREFIX; +import java.io.InputStream; + import javax.inject.Inject; import org.jclouds.compute.ComputeServiceAdapter; @@ -42,6 +43,7 @@ import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.base.Supplier; import com.google.common.base.Throwables; +import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.inject.Singleton; @@ -58,12 +60,18 @@ public class VirtualBoxComputeServiceAdapter implements ComputeServiceAdapter manager; private final Function iMachineToImage; + private final Function> images; + private final Supplier imagesDescSupplier; @Inject public VirtualBoxComputeServiceAdapter(Supplier manager, - Function iMachineToImage) { + Function iMachineToImage, + Function> images, + Supplier imagesStreamSupplier) { this.iMachineToImage = iMachineToImage; this.manager = checkNotNull(manager, "manager"); + this.images = images; + this.imagesDescSupplier = imagesStreamSupplier; } @Override @@ -89,10 +97,10 @@ public class VirtualBoxComputeServiceAdapter implements ComputeServiceAdapter listImages() { - return transform(imageMachines(), iMachineToImage); - } + @Override + public Iterable listImages() { + return images.apply(imagesDescSupplier.get()).asMap().values(); + } private Iterable imageMachines() { final Predicate imagePredicate = new Predicate() { diff --git a/labs/virtualbox/src/main/java/org/jclouds/virtualbox/config/LocalFileYamlStreamSupplier.java b/labs/virtualbox/src/main/java/org/jclouds/virtualbox/config/LocalFileYamlStreamSupplier.java new file mode 100644 index 0000000000..d6d1701f91 --- /dev/null +++ b/labs/virtualbox/src/main/java/org/jclouds/virtualbox/config/LocalFileYamlStreamSupplier.java @@ -0,0 +1,5 @@ +package org.jclouds.virtualbox.config; + +public class LocalFileYamlStreamSupplier { + +} diff --git a/labs/virtualbox/src/main/java/org/jclouds/virtualbox/config/VirtualBoxComputeServiceContextModule.java b/labs/virtualbox/src/main/java/org/jclouds/virtualbox/config/VirtualBoxComputeServiceContextModule.java index 7a3c0c157b..f96d260f92 100644 --- a/labs/virtualbox/src/main/java/org/jclouds/virtualbox/config/VirtualBoxComputeServiceContextModule.java +++ b/labs/virtualbox/src/main/java/org/jclouds/virtualbox/config/VirtualBoxComputeServiceContextModule.java @@ -54,6 +54,7 @@ import org.jclouds.virtualbox.functions.IMachineToHardware; import org.jclouds.virtualbox.functions.IMachineToImage; import org.jclouds.virtualbox.functions.IMachineToNodeMetadata; import org.jclouds.virtualbox.functions.IMachineToSshClient; +import org.jclouds.virtualbox.functions.admin.ImageFromYamlString; import org.jclouds.virtualbox.functions.admin.StartJettyIfNotAlreadyRunning; import org.jclouds.virtualbox.functions.admin.StartVBoxIfNotAlreadyRunning; import org.jclouds.virtualbox.predicates.SshResponds; @@ -106,6 +107,8 @@ public class VirtualBoxComputeServiceContextModule extends }).to((Class) StartJettyIfNotAlreadyRunning.class); bind(new TypeLiteral>() { }).to((Class) StartVBoxIfNotAlreadyRunning.class); + bind(new TypeLiteral>>() { + }).to((Class) ImageFromYamlString.class); // for byon bind(new TypeLiteral>() { }).to(SupplyFromProviderURIOrNodesProperty.class); diff --git a/labs/virtualbox/src/main/java/org/jclouds/virtualbox/config/VirtualBoxConstants.java b/labs/virtualbox/src/main/java/org/jclouds/virtualbox/config/VirtualBoxConstants.java index ae836e0fc4..451c4588d1 100644 --- a/labs/virtualbox/src/main/java/org/jclouds/virtualbox/config/VirtualBoxConstants.java +++ b/labs/virtualbox/src/main/java/org/jclouds/virtualbox/config/VirtualBoxConstants.java @@ -34,6 +34,8 @@ public interface VirtualBoxConstants { public static final String VIRTUALBOX_INSTALLATION_KEY_SEQUENCE = "jclouds.virtualbox.installationkeysequence"; public static final String VIRTUALBOX_WORKINGDIR = "jclouds.virtualbox.workingdir"; + + public static final String VIRTUALBOX_IMAGES_DESCRIPTOR = "jclouds.virtualbox.image.descriptor.yaml"; public static final String VIRTUALBOX_ISO_URL = "jclouds.virtualbox.isourl"; diff --git a/labs/virtualbox/src/main/java/org/jclouds/virtualbox/functions/admin/ImageFromYamlStream.java b/labs/virtualbox/src/main/java/org/jclouds/virtualbox/functions/admin/ImageFromYamlString.java similarity index 87% rename from labs/virtualbox/src/main/java/org/jclouds/virtualbox/functions/admin/ImageFromYamlStream.java rename to labs/virtualbox/src/main/java/org/jclouds/virtualbox/functions/admin/ImageFromYamlString.java index a84def5767..3f17a34676 100644 --- a/labs/virtualbox/src/main/java/org/jclouds/virtualbox/functions/admin/ImageFromYamlStream.java +++ b/labs/virtualbox/src/main/java/org/jclouds/virtualbox/functions/admin/ImageFromYamlString.java @@ -21,7 +21,6 @@ package org.jclouds.virtualbox.functions.admin; import static com.google.common.base.Preconditions.checkState; -import java.io.InputStream; import java.util.List; import java.util.Map; @@ -29,7 +28,6 @@ import javax.inject.Singleton; import org.jclouds.compute.domain.Image; import org.jclouds.virtualbox.domain.YamlImage; -import org.yaml.snakeyaml.Loader; import org.yaml.snakeyaml.TypeDescription; import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.constructor.Constructor; @@ -47,7 +45,7 @@ import com.google.common.collect.Maps; * @author Andrea Turli */ @Singleton -public class ImageFromYamlStream implements Function> { +public class ImageFromYamlString implements Function> { /** * Type-safe config class for YAML @@ -57,13 +55,8 @@ public class ImageFromYamlStream implements Function images; } - private Object construct(String data) { - Yaml yaml = new Yaml(); - return yaml.load(data); - } - @Override - public LoadingCache apply(InputStream source) { + public LoadingCache apply(String source) { Constructor constructor = new Constructor(Config.class); @@ -71,10 +64,11 @@ public class ImageFromYamlStream implements Function backingMap = Maps.uniqueIndex(Iterables.transform(config.images, YamlImage.toImage), new Function() { diff --git a/labs/virtualbox/src/test/java/org/jclouds/virtualbox/BaseVirtualBoxClientLiveTest.java b/labs/virtualbox/src/test/java/org/jclouds/virtualbox/BaseVirtualBoxClientLiveTest.java index 354cd08d91..0c62b3aa72 100644 --- a/labs/virtualbox/src/test/java/org/jclouds/virtualbox/BaseVirtualBoxClientLiveTest.java +++ b/labs/virtualbox/src/test/java/org/jclouds/virtualbox/BaseVirtualBoxClientLiveTest.java @@ -96,7 +96,7 @@ public class BaseVirtualBoxClientLiveTest extends BaseVersionedServiceLiveTest { @BeforeClass(groups = "live") public void setupClient() { setupCredentials(); - Properties overrides = setupProperties(); + Properties overrides = new VirtualBoxPropertiesBuilder(setupProperties()).build(); CacheNodeStoreModule hostModule = new CacheNodeStoreModule( ImmutableMap.of( diff --git a/labs/virtualbox/src/test/java/org/jclouds/virtualbox/compute/VirtualBoxComputeServiceAdapterTest.java b/labs/virtualbox/src/test/java/org/jclouds/virtualbox/compute/VirtualBoxComputeServiceAdapterTest.java index 819cf2b328..eba0e9858e 100644 --- a/labs/virtualbox/src/test/java/org/jclouds/virtualbox/compute/VirtualBoxComputeServiceAdapterTest.java +++ b/labs/virtualbox/src/test/java/org/jclouds/virtualbox/compute/VirtualBoxComputeServiceAdapterTest.java @@ -38,6 +38,7 @@ import org.jclouds.compute.reference.ComputeServiceConstants; import org.jclouds.json.Json; import org.jclouds.json.config.GsonModule; import org.jclouds.virtualbox.functions.IMachineToImage; +import org.jclouds.virtualbox.functions.admin.ImageFromYamlString; import org.testng.annotations.Test; import org.virtualbox_4_1.IGuestOSType; import org.virtualbox_4_1.IMachine; @@ -45,6 +46,7 @@ import org.virtualbox_4_1.IVirtualBox; import org.virtualbox_4_1.VirtualBoxManager; import com.google.common.base.Function; +import com.google.common.base.Supplier; import com.google.common.base.Suppliers; import com.google.common.collect.Iterators; import com.google.inject.Guice; @@ -83,11 +85,25 @@ public class VirtualBoxComputeServiceAdapterTest { replay(manager, vBox, clonedMachine, imageMachine, osType); Function iMachineToImage = new IMachineToImage(Suppliers.ofInstance(manager), osMap); - VirtualBoxComputeServiceAdapter adapter = new VirtualBoxComputeServiceAdapter(Suppliers.ofInstance(manager), iMachineToImage); + VirtualBoxComputeServiceAdapter adapter = new VirtualBoxComputeServiceAdapter(Suppliers.ofInstance(manager), iMachineToImage, new ImageFromYamlString(), new Supplier() { + + @Override + public String get() { + return "images:\n" + + " - id: myTestId\n" + + " name: ubuntu-11.04-server-i386\n" + + " description: ubuntu 11.04 server (i386)\n" + + " os_arch: x86\n" + + " os_family: ubuntu\n" + + " os_description: ubuntu\n" + + " os_version: 11.04\n" + + " iso: http://releases.ubuntu.com/11.04/ubuntu-11.04-server-i386.iso"; + } + }); Iterator iterator = adapter.listImages().iterator(); Image image = Iterators.getOnlyElement(iterator); - assertEquals(image.getDescription(), VIRTUALBOX_IMAGE_PREFIX + "ubuntu-10.04"); + assertEquals(image.getDescription(), "ubuntu 11.04 server (i386)"); } } diff --git a/labs/virtualbox/src/test/java/org/jclouds/virtualbox/functions/admin/ImageFromYamlStreamTest.java b/labs/virtualbox/src/test/java/org/jclouds/virtualbox/functions/admin/ImageFromYamlStreamTest.java index 3061979225..89f42a1137 100644 --- a/labs/virtualbox/src/test/java/org/jclouds/virtualbox/functions/admin/ImageFromYamlStreamTest.java +++ b/labs/virtualbox/src/test/java/org/jclouds/virtualbox/functions/admin/ImageFromYamlStreamTest.java @@ -22,7 +22,9 @@ package org.jclouds.virtualbox.functions.admin; import static org.testng.Assert.assertEquals; import java.io.InputStream; +import java.io.InputStreamReader; +import org.apache.commons.io.IOUtils; import org.jclouds.compute.domain.Image; import org.jclouds.compute.domain.ImageBuilder; import org.jclouds.compute.domain.OperatingSystem; @@ -37,20 +39,23 @@ import com.google.common.collect.ImmutableMap; @Test(groups = "unit") public class ImageFromYamlStreamTest { - public static final Image TEST1 = new ImageBuilder() - .id("myTestId") - .name("ubuntu-11.04-server-i386") - .description("ubuntu 11.04 server (i386)") - .operatingSystem( - OperatingSystem.builder().description("ubuntu").family(OsFamily.UBUNTU).version("11.04").build()) - .build(); + public static final Image TEST1 = new ImageBuilder() + .id("myTestId") + .name("ubuntu-11.04-server-i386") + .description("ubuntu 11.04 server (i386)") + .operatingSystem(OperatingSystem.builder().description("ubuntu").family(OsFamily.UBUNTU) + .version("11.04").build()).build(); - @Test - public void testNodesParse() throws Exception { - InputStream is = getClass().getResourceAsStream("/testImages.yaml"); - ImageFromYamlStream parser = new ImageFromYamlStream(); - assertEquals(parser.apply(is).asMap(), ImmutableMap.of(TEST1.getId(), TEST1)); - is.close(); - } + @Test + public void testNodesParse() throws Exception { + + StringBuilder yamlFileLines = new StringBuilder(); + for (Object line : IOUtils.readLines(new InputStreamReader(getClass().getResourceAsStream("/testImages.yaml")))) { + yamlFileLines.append(line).append("\n"); + } + + ImageFromYamlString parser = new ImageFromYamlString(); + assertEquals(parser.apply(yamlFileLines.toString()).asMap(), ImmutableMap.of(TEST1.getId(), TEST1)); + } } \ No newline at end of file diff --git a/labs/virtualbox/src/test/resources/logback.xml b/labs/virtualbox/src/test/resources/logback.xml index c1bb1b78c4..4765287d3f 100644 --- a/labs/virtualbox/src/test/resources/logback.xml +++ b/labs/virtualbox/src/test/resources/logback.xml @@ -31,9 +31,16 @@ %d %-5p [%c] (%t) %m%n + + + + %-4r [%thread] %-5level - %msg%n + + - + +