You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sv...@apache.org on 2017/05/23 14:23:43 UTC
[5/6] brooklyn-server git commit: jclouds stubbing: support different
providers
jclouds stubbing: support different providers
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/57ded182
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/57ded182
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/57ded182
Branch: refs/heads/master
Commit: 57ded1822c2cecfb0be0b55a7dc528cd9d7300d9
Parents: 8a832de
Author: Aled Sage <al...@gmail.com>
Authored: Mon May 22 14:06:31 2017 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Tue May 23 14:45:33 2017 +0100
----------------------------------------------------------------------
.../brooklyn/AbstractJcloudsStubYamlTest.java | 9 +-
.../jclouds/AbstractJcloudsStubbedUnitTest.java | 27 ++-
.../jclouds/JcloudsStubTemplateBuilder.java | 204 ++++++++++++++-----
3 files changed, 185 insertions(+), 55 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/57ded182/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractJcloudsStubYamlTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractJcloudsStubYamlTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractJcloudsStubYamlTest.java
index 380c132..4854160 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractJcloudsStubYamlTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractJcloudsStubYamlTest.java
@@ -105,13 +105,17 @@ public abstract class AbstractJcloudsStubYamlTest extends AbstractJcloudsStubbed
}
protected void addStubbedLocationToCatalog() {
+ String locationSpec = getLocationSpec();
+ String provider = getProvider();
+ String regionOrEndpoint = getRegion();
+
addCatalogItems(
"brooklyn.catalog:",
" id: " + LOCATION_CATALOG_ID,
" version: 1.0.0",
" itemType: location",
" item:",
- " type: " + LOCATION_SPEC,
+ " type: " + locationSpec,
" brooklyn.config:",
" identity: myidentity",
" credential: mycredential",
@@ -124,6 +128,9 @@ public abstract class AbstractJcloudsStubYamlTest extends AbstractJcloudsStubbed
" $brooklyn:object:",
" type: "+JcloudsStubTemplateBuilder.class.getName(),
" factoryMethod.name: create",
+ " factoryMethod.args:",
+ " - " + provider,
+ " - " + regionOrEndpoint,
" " + JcloudsLocation.POLL_FOR_FIRST_REACHABLE_ADDRESS_PREDICATE.getName() + ":",
" $brooklyn:object:",
" type: "+Predicates.class.getName(),
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/57ded182/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsStubbedUnitTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsStubbedUnitTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsStubbedUnitTest.java
index 37231be..83c6b7e 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsStubbedUnitTest.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsStubbedUnitTest.java
@@ -18,8 +18,13 @@
*/
package org.apache.brooklyn.location.jclouds;
+import static com.google.common.base.Preconditions.checkNotNull;
+
import java.util.Map;
+import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.api.location.LocationSpec;
+import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
import org.apache.brooklyn.location.jclouds.StubbedComputeServiceRegistry.BasicNodeCreator;
@@ -33,7 +38,6 @@ import org.slf4j.LoggerFactory;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
-import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableMap;
@@ -94,7 +98,7 @@ public abstract class AbstractJcloudsStubbedUnitTest extends AbstractJcloudsLive
this.computeServiceRegistry = new StubbedComputeServiceRegistry(nodeCreator, false);
final Map<Object, Object> defaults = ImmutableMap.builder()
.put(JcloudsLocationConfig.COMPUTE_SERVICE_REGISTRY, computeServiceRegistry)
- .put(JcloudsLocationConfig.TEMPLATE_BUILDER, JcloudsStubTemplateBuilder.create())
+ .put(JcloudsLocationConfig.TEMPLATE_BUILDER, JcloudsStubTemplateBuilder.create(getProvider(), getRegion()))
.put(JcloudsLocationConfig.ACCESS_IDENTITY, "stub-identity")
.put(JcloudsLocationConfig.ACCESS_CREDENTIAL, "stub-credential")
.put(SshMachineLocation.SSH_TOOL_CLASS, RecordingSshTool.class.getName())
@@ -125,4 +129,23 @@ public abstract class AbstractJcloudsStubbedUnitTest extends AbstractJcloudsLive
protected NodeCreator newNodeCreator() {
return new BasicNodeCreator();
}
+
+ protected String getProvider() {
+ LocationSpec<?> spec = mgmt().getLocationRegistry().getLocationSpec(getLocationSpec()).get();
+ return getRequiredConfig(spec, JcloudsLocation.CLOUD_PROVIDER);
+ }
+
+ protected String getRegion() {
+ LocationSpec<? extends Location> spec = mgmt().getLocationRegistry().getLocationSpec(getLocationSpec()).get();
+ return getRequiredConfig(spec, JcloudsLocation.CLOUD_REGION_ID);
+ }
+
+ protected String getRequiredConfig(LocationSpec<?> spec, ConfigKey<String> key) {
+ String result = (String) spec.getConfig().get(key);
+ if (result != null) {
+ return result;
+ }
+ result = (String) spec.getFlags().get(key.getName());
+ return checkNotNull(result, "config "+key.getName());
+ }
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/57ded182/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java
index 0ac5fb2..e12f5cb 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java
@@ -18,16 +18,25 @@
*/
package org.apache.brooklyn.location.jclouds;
-import com.google.common.base.Functions;
-import com.google.common.base.Supplier;
-import com.google.common.base.Suppliers;
-import com.google.common.base.Objects.ToStringHelper;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.CacheLoader;
-import com.google.common.cache.LoadingCache;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import org.jclouds.compute.domain.*;
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.t2_micro;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
+
+import javax.inject.Provider;
+
+import org.jclouds.aws.ec2.compute.AWSEC2TemplateOptions;
+import org.jclouds.compute.domain.Hardware;
+import org.jclouds.compute.domain.HardwareBuilder;
+import org.jclouds.compute.domain.Image;
+import org.jclouds.compute.domain.ImageBuilder;
+import org.jclouds.compute.domain.OperatingSystem;
+import org.jclouds.compute.domain.OsFamily;
+import org.jclouds.compute.domain.Processor;
+import org.jclouds.compute.domain.TemplateBuilder;
+import org.jclouds.compute.domain.internal.TemplateBuilderImpl;
import org.jclouds.compute.options.TemplateOptions;
import org.jclouds.compute.strategy.GetImageStrategy;
import org.jclouds.compute.suppliers.ImageCacheSupplier;
@@ -38,47 +47,57 @@ import org.jclouds.domain.LoginCredentials;
import org.jclouds.ec2.compute.domain.RegionAndName;
import org.jclouds.ec2.compute.functions.ImagesToRegionAndIdMap;
import org.jclouds.ec2.compute.internal.EC2TemplateBuilderImpl;
+import org.jclouds.ec2.compute.options.EC2TemplateOptions;
import org.jclouds.ec2.domain.RootDeviceType;
import org.jclouds.ec2.domain.VirtualizationType;
+import org.jclouds.googlecomputeengine.compute.options.GoogleComputeEngineTemplateOptions;
import org.jclouds.rest.AuthorizationException;
+import org.jclouds.softlayer.compute.options.SoftLayerTemplateOptions;
-import javax.inject.Provider;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicReference;
-
-import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.*;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import com.google.common.base.Functions;
+import com.google.common.base.Objects.ToStringHelper;
+import com.google.common.base.Predicates;
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
public class JcloudsStubTemplateBuilder {
- protected final Location provider = new LocationBuilder().scope(LocationScope.PROVIDER).id("aws-ec2").description("aws-ec2").build();
- protected final Location jcloudsDomainLocation = new LocationBuilder().scope(LocationScope.REGION).id("us-east-1").description("us-east-1")
- .parent(provider).build();
-
- protected final Hardware HARDWARE_SUPPORTING_BOGUS = t2_micro().id("supporting-bogus")
- .supportsImageIds(ImmutableSet.of("us-east-1/bogus-image"))
- .virtualizationType(VirtualizationType.PARAVIRTUAL)
- .rootDeviceType(RootDeviceType.EBS)
- .build();
+ protected final Location provider;
+ protected final Location jcloudsDomainLocation;
+ protected final String providerName;
+ protected final String regionName;
+
public static TemplateBuilder create() {
return new JcloudsStubTemplateBuilder().createTemplateBuilder();
}
+ public static TemplateBuilder create(String providerName, String regionName) {
+ return new JcloudsStubTemplateBuilder(providerName, regionName).createTemplateBuilder();
+ }
+
+ public JcloudsStubTemplateBuilder() {
+ this("aws-ec2", "us-east-1");
+ }
+
+ public JcloudsStubTemplateBuilder(String providerName, String regionName) {
+ this.providerName = providerName;
+ this.regionName = regionName;
+ this.provider = new LocationBuilder().scope(LocationScope.PROVIDER).id(providerName).description(providerName).build();
+ this.jcloudsDomainLocation = new LocationBuilder().scope(LocationScope.REGION).id(this.regionName).description(this.regionName)
+ .parent(provider).build();
+ }
+
public TemplateBuilder createTemplateBuilder() {
- final Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.of(
- new ImageBuilder().providerId("ebs-image-provider").name("image")
- .id("us-east-1/bogus-image").location(jcloudsDomainLocation)
- .userMetadata(ImmutableMap.of("rootDeviceType", RootDeviceType.EBS.value()))
- .operatingSystem(new OperatingSystem(OsFamily.UBUNTU, null, "1.0", VirtualizationType.PARAVIRTUAL.value(), "ubuntu", true))
- .description("description").version("1.0").defaultCredentials(LoginCredentials.builder().user("root").build())
- .status(Image.Status.AVAILABLE)
- .build()));
+ final Supplier<Set<? extends Image>> images = Suppliers.<Set<? extends Image>> ofInstance(ImmutableSet.of(getImage()));
ImmutableMap<RegionAndName, Image> imageMap = (ImmutableMap<RegionAndName, Image>) ImagesToRegionAndIdMap.imagesToMap(images.get());
Supplier<LoadingCache<RegionAndName, ? extends Image>> imageCache = Suppliers.<LoadingCache<RegionAndName, ? extends Image>> ofInstance(
CacheBuilder.newBuilder().<RegionAndName, Image>build(CacheLoader.from(Functions.forMap(imageMap))));
- JcloudsStubTemplateBuilder jcloudsStubTemplateBuilder = new JcloudsStubTemplateBuilder();
- return jcloudsStubTemplateBuilder.newTemplateBuilder(images, imageCache);
+ return newTemplateBuilder(images, imageCache);
}
/**
@@ -87,10 +106,9 @@ public class JcloudsStubTemplateBuilder {
*/
@SuppressWarnings("unchecked")
protected TemplateBuilder newTemplateBuilder(Supplier<Set<? extends Image>> images, Supplier<LoadingCache<RegionAndName, ? extends Image>> imageCache) {
-
Provider<TemplateOptions> optionsProvider = mock(Provider.class);
Provider<TemplateBuilder> templateBuilderProvider = mock(Provider.class);
- TemplateOptions defaultOptions = mock(TemplateOptions.class);
+ TemplateOptions defaultOptions = newTemplateOptions();
final GetImageStrategy getImageStrategy = mock(GetImageStrategy.class);
when(optionsProvider.get()).thenReturn(defaultOptions);
@@ -98,7 +116,7 @@ public class JcloudsStubTemplateBuilder {
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
.of(jcloudsDomainLocation));
Supplier<Set<? extends Hardware>> sizes = Suppliers.<Set<? extends Hardware>> ofInstance(ImmutableSet
- .of(HARDWARE_SUPPORTING_BOGUS));
+ .of(getHardware()));
// AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>(new AuthorizationException());
@@ -111,18 +129,100 @@ public class JcloudsStubTemplateBuilder {
}
};
- return new EC2TemplateBuilderImpl(
- locations,
- new ImageCacheSupplier(images, 60, authException, imageLoader),
- sizes,
- Suppliers.ofInstance(jcloudsDomainLocation),
- optionsProvider,
- templateBuilderProvider,
- imageCache) {
- @Override
- protected ToStringHelper string() {
- return super.string().add("type", "Stubbed-TemplateBuilder");
- }
- };
+ switch (providerName) {
+ case "aws-ec2" :
+ case "ec2" :
+ return new EC2TemplateBuilderImpl(
+ locations,
+ new ImageCacheSupplier(images, 60, authException, imageLoader),
+ sizes,
+ Suppliers.ofInstance(jcloudsDomainLocation),
+ optionsProvider,
+ templateBuilderProvider,
+ imageCache) {
+ @Override
+ protected ToStringHelper string() {
+ return super.string().add("type", "Stubbed-TemplateBuilder");
+ }
+ };
+ default:
+ return new TemplateBuilderImpl(
+ locations,
+ new ImageCacheSupplier(images, 60, authException, imageLoader),
+ sizes,
+ Suppliers.ofInstance(jcloudsDomainLocation),
+ optionsProvider,
+ templateBuilderProvider) {
+ @Override
+ protected ToStringHelper string() {
+ return super.string().add("type", "Stubbed-TemplateBuilder");
+ }
+ };
+ }
+ }
+
+ protected TemplateOptions newTemplateOptions() {
+ switch (providerName) {
+ case "aws-ec2" :
+ return new AWSEC2TemplateOptions();
+ case "ec2" :
+ return new EC2TemplateOptions();
+ case "google-compute-engine" :
+ return new GoogleComputeEngineTemplateOptions();
+ //return mock(GoogleComputeEngineTemplateOptions.class);
+ case "azurecompute" :
+ return new org.jclouds.azurecompute.compute.options.AzureComputeTemplateOptions();
+ case "azurecompute-arm" :
+ return new org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions();
+ case "softlayer" :
+ return new SoftLayerTemplateOptions();
+ default:
+ throw new UnsupportedOperationException("Unsupported stubbed TemplateOptions for provider "+providerName);
+ }
+ }
+
+ protected Image getImage() {
+ switch (providerName) {
+ case "aws-ec2" :
+ case "ec2" :
+ return new ImageBuilder().providerId("ebs-image-provider").name("image")
+ .id(regionName+"/bogus-image").location(jcloudsDomainLocation)
+ .userMetadata(ImmutableMap.of("rootDeviceType", RootDeviceType.EBS.value()))
+ .operatingSystem(new OperatingSystem(OsFamily.UBUNTU, null, "1.0", VirtualizationType.PARAVIRTUAL.value(), "ubuntu", true))
+ .description("description").version("1.0").defaultCredentials(LoginCredentials.builder().user("root").build())
+ .status(Image.Status.AVAILABLE)
+ .build();
+ case "google-compute-engine" :
+ return new ImageBuilder().providerId("gce-image-provider").name("image")
+ .id(regionName+"/bogus-image").location(jcloudsDomainLocation)
+ .operatingSystem(new OperatingSystem(OsFamily.UBUNTU, null, "1.0", VirtualizationType.PARAVIRTUAL.value(), "ubuntu", true))
+ .description("description").version("1.0").defaultCredentials(LoginCredentials.builder().user("root").build())
+ .status(Image.Status.AVAILABLE)
+ .build();
+ default:
+ throw new UnsupportedOperationException("Unsupported stubbed Image for provider "+providerName);
+ }
+ }
+
+ protected Hardware getHardware() {
+ switch (providerName) {
+ case "aws-ec2" :
+ case "ec2" :
+ return t2_micro().id("supporting-bogus")
+ .supportsImageIds(ImmutableSet.of("us-east-1/bogus-image"))
+ .virtualizationType(VirtualizationType.PARAVIRTUAL)
+ .rootDeviceType(RootDeviceType.EBS)
+ .build();
+ case "google-compute-engine" :
+ return new HardwareBuilder()
+ .providerId(providerName)
+ .id("n1-standard-1")
+ .ram(3750)
+ .processor(new Processor(1, 1234))
+ .supportsImage(Predicates.alwaysTrue())
+ .build();
+ default:
+ throw new UnsupportedOperationException("Unsupported stubbed Hardware for provider "+providerName);
+ }
}
}