You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ad...@apache.org on 2014/11/18 18:53:35 UTC
[16/17] jclouds git commit: JCLOUDS-774 ec2 api was ignoring the
jclouds.region property,
which made exceptions possible on all zone-scoped api calls.
JCLOUDS-774 ec2 api was ignoring the jclouds.region property, which made exceptions possible on all zone-scoped api calls.
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/4b813ce0
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/4b813ce0
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/4b813ce0
Branch: refs/heads/1.7.x
Commit: 4b813ce096e76bc135b6d19d5c65b244954aa9a6
Parents: 95141ff
Author: Adrian Cole <ad...@gmail.com>
Authored: Sun Nov 16 14:17:16 2014 -0800
Committer: Adrian Cole <ad...@apache.org>
Committed: Tue Nov 18 09:40:38 2014 -0800
----------------------------------------------------------------------
.../suppliers/DescribeRegionsForRegionURIs.java | 37 ++++++-----
.../ec2/internal/BaseEC2ApiMockTest.java | 14 +++--
.../DescribeRegionsForRegionURIsMockTest.java | 64 ++++++++++++++++++++
3 files changed, 94 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/4b813ce0/apis/ec2/src/main/java/org/jclouds/ec2/suppliers/DescribeRegionsForRegionURIs.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/main/java/org/jclouds/ec2/suppliers/DescribeRegionsForRegionURIs.java b/apis/ec2/src/main/java/org/jclouds/ec2/suppliers/DescribeRegionsForRegionURIs.java
index d8d7a51..909faa9 100644
--- a/apis/ec2/src/main/java/org/jclouds/ec2/suppliers/DescribeRegionsForRegionURIs.java
+++ b/apis/ec2/src/main/java/org/jclouds/ec2/suppliers/DescribeRegionsForRegionURIs.java
@@ -18,33 +18,40 @@ package org.jclouds.ec2.suppliers;
import java.net.URI;
import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
import javax.inject.Inject;
-import javax.inject.Singleton;
import org.jclouds.ec2.EC2Api;
-import org.jclouds.ec2.features.AvailabilityZoneAndRegionApi;
-import org.jclouds.location.Region;
import org.jclouds.location.suppliers.RegionIdToURISupplier;
-import org.jclouds.util.Suppliers2;
+import org.jclouds.location.suppliers.fromconfig.RegionIdsFromConfiguration;
import com.google.common.base.Supplier;
-import com.google.common.collect.Maps;
+import com.google.common.base.Suppliers;
+import com.google.common.collect.ImmutableMap;
-@Singleton
-public class DescribeRegionsForRegionURIs implements RegionIdToURISupplier {
- private final AvailabilityZoneAndRegionApi client;
+/**
+ * Uses the {@code DescribeRegions} call to return the regions endpoints, subject to any whitelist present in the
+ * property {@link org.jclouds.location.reference.LocationConstants#PROPERTY_REGIONS}.
+ */
+public final class DescribeRegionsForRegionURIs implements RegionIdToURISupplier {
+ private final EC2Api api;
+ private final Set<String> whitelistedRegionIds;
- @Inject
- public DescribeRegionsForRegionURIs(EC2Api client) {
- this.client = client.getAvailabilityZoneAndRegionApi().get();
+ @Inject DescribeRegionsForRegionURIs(EC2Api api, RegionIdsFromConfiguration regionIdsFromConfiguration) {
+ this.api = api;
+ this.whitelistedRegionIds = regionIdsFromConfiguration.get();
}
- @Singleton
- @Region
@Override
public Map<String, Supplier<URI>> get() {
- Map<String, URI> regionToUris = client.describeRegions();
- return Maps.transformValues(regionToUris, Suppliers2.<URI> ofInstanceFunction());
+ ImmutableMap.Builder<String, Supplier<URI>> result = ImmutableMap.builder();
+ for (Entry<String, URI> regionUrl : api.getAvailabilityZoneAndRegionApi().get().describeRegions().entrySet()) {
+ if (whitelistedRegionIds.isEmpty() || whitelistedRegionIds.contains(regionUrl.getKey())) {
+ result.put(regionUrl.getKey(), Suppliers.ofInstance(regionUrl.getValue()));
+ }
+ }
+ return result.build();
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/4b813ce0/apis/ec2/src/test/java/org/jclouds/ec2/internal/BaseEC2ApiMockTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/internal/BaseEC2ApiMockTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/internal/BaseEC2ApiMockTest.java
index 7834ba0..441eec2 100644
--- a/apis/ec2/src/test/java/org/jclouds/ec2/internal/BaseEC2ApiMockTest.java
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/internal/BaseEC2ApiMockTest.java
@@ -58,18 +58,20 @@ public class BaseEC2ApiMockTest {
private Map<String, MockWebServer> regionToServers = Maps.newLinkedHashMap();
protected EC2Api api() {
- return builder().buildApi(EC2Api.class);
+ return builder(new Properties()).buildApi(EC2Api.class);
}
- protected ContextBuilder builder() {
- Properties overrides = new Properties();
+ protected ContextBuilder builder(Properties overrides) {
overrides.setProperty(Constants.PROPERTY_MAX_RETRIES, "1");
- return ContextBuilder.newBuilder(new EC2ApiMetadata()).credentials(ACCESS_KEY, SECRET_KEY)
- .endpoint("http://localhost:" + regionToServers.get(DEFAULT_REGION).getPort()).overrides(overrides)
+ return ContextBuilder.newBuilder(new EC2ApiMetadata())
+ .credentials(ACCESS_KEY, SECRET_KEY)
+ .endpoint("http://localhost:" + regionToServers.get(DEFAULT_REGION).getPort())
+ .overrides(overrides)
.modules(modules);
}
- private final Set<Module> modules = ImmutableSet.<Module>of(new ExecutorServiceModule(sameThreadExecutor()));
+ private final Set<Module> modules = ImmutableSet.<Module>of(
+ new ExecutorServiceModule(sameThreadExecutor(), sameThreadExecutor()));
@BeforeMethod
public void start() throws IOException {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/4b813ce0/apis/ec2/src/test/java/org/jclouds/ec2/suppliers/DescribeRegionsForRegionURIsMockTest.java
----------------------------------------------------------------------
diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/suppliers/DescribeRegionsForRegionURIsMockTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/suppliers/DescribeRegionsForRegionURIsMockTest.java
new file mode 100644
index 0000000..ec39f66
--- /dev/null
+++ b/apis/ec2/src/test/java/org/jclouds/ec2/suppliers/DescribeRegionsForRegionURIsMockTest.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.ec2.suppliers;
+
+import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+
+import java.net.URI;
+import java.util.Map;
+import java.util.Properties;
+
+import org.jclouds.ec2.internal.BaseEC2ApiMockTest;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Supplier;
+
+@Test(groups = "unit", testName = "DescribeRegionsForRegionURIsMockTest", singleThreaded = true)
+public class DescribeRegionsForRegionURIsMockTest extends BaseEC2ApiMockTest {
+
+ public void buildsUrlsForEachRegion() throws Exception {
+ enqueueRegions("us-east-1", "eu-central-1");
+
+ Map<String, Supplier<URI>> result = supplier(new Properties()).get();
+
+ assertEquals(result.size(), 2);
+ assertNotNull(result.get("us-east-1").get());
+ assertNotNull(result.get("eu-central-1").get());
+
+ assertPosted("us-east-1", "Action=DescribeRegions");
+ }
+
+ public void honorsRegionWhitelist() throws Exception {
+ enqueueRegions("us-east-1", "eu-central-1");
+
+ Properties overrides = new Properties();
+ overrides.setProperty(PROPERTY_REGIONS, "us-east-1");
+
+ Map<String, Supplier<URI>> result = supplier(overrides).get();
+
+ assertEquals(result.size(), 1);
+ assertNotNull(result.get("us-east-1").get());
+
+ assertPosted("us-east-1", "Action=DescribeRegions");
+ }
+
+ private DescribeRegionsForRegionURIs supplier(Properties overrides) {
+ return builder(overrides).buildInjector().getInstance(DescribeRegionsForRegionURIs.class);
+ }
+}