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 super IMachine> 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
+
+
-
+
+