Updated Branches:
  refs/heads/master 3172e0bc1 -> 3aabd5079

New base class for all OpenStack mock tests.


Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/commit/3aabd507
Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/tree/3aabd507
Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/diff/3aabd507

Branch: refs/heads/master
Commit: 3aabd507907365e71b4a472e0b35b37e4d8c8410
Parents: 3172e0b
Author: Everett Toews <[email protected]>
Authored: Fri Oct 11 15:42:44 2013 -0500
Committer: Everett Toews <[email protected]>
Committed: Fri Oct 11 17:17:00 2013 -0500

----------------------------------------------------------------------
 apis/openstack-keystone/pom.xml                 |  6 ++
 .../v2_0/internal/BaseOpenStackMockTest.java    | 99 ++++++++++++++++++++
 2 files changed, 105 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/3aabd507/apis/openstack-keystone/pom.xml
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/pom.xml b/apis/openstack-keystone/pom.xml
index 8d7d431..3c4e8e8 100644
--- a/apis/openstack-keystone/pom.xml
+++ b/apis/openstack-keystone/pom.xml
@@ -73,6 +73,12 @@
       <artifactId>logback-classic</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>com.squareup.okhttp</groupId>
+      <artifactId>mockwebserver</artifactId>
+      <version>1.2.1</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
   
   <profiles>

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/3aabd507/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/internal/BaseOpenStackMockTest.java
----------------------------------------------------------------------
diff --git 
a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/internal/BaseOpenStackMockTest.java
 
b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/internal/BaseOpenStackMockTest.java
new file mode 100644
index 0000000..2765cb2
--- /dev/null
+++ 
b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/internal/BaseOpenStackMockTest.java
@@ -0,0 +1,99 @@
+/*
+ * 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.openstack.v2_0.internal;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.reflect.TypeToken;
+import com.google.inject.Module;
+import com.squareup.okhttp.mockwebserver.MockResponse;
+import com.squareup.okhttp.mockwebserver.MockWebServer;
+import com.squareup.okhttp.mockwebserver.QueueDispatcher;
+import com.squareup.okhttp.mockwebserver.RecordedRequest;
+import org.jclouds.ContextBuilder;
+import org.jclouds.concurrent.config.ExecutorServiceModule;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import static 
com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor;
+import static org.jclouds.Constants.PROPERTY_MAX_RETRIES;
+
+/**
+ * @author Jeremy Daggett
+ */
+public class BaseOpenStackMockTest<A extends Closeable> {
+
+   public static String access = 
"{\"access\":{\"token\":{\"id\":\"b84f4a37-5126-4603-9521-ccd0665fbde1\",\"expires\":\"2013-04-13T16:49:57.000-05:00\",\"tenant\":{\"id\":\"123123\",\"name\":\"123123\"}},\"serviceCatalog\":[{\"endpoints\":[{\"tenantId\":\"123123\",\"publicURL\":\"URL/v1.0/123123\"}],\"name\":\"cloudMonitoring\",\"type\":\"rax:monitor\"},{\"endpoints\":[{\"region\":\"DFW\",\"tenantId\":\"MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\",\"publicURL\":\"URL/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\"},{\"region\":\"ORD\",\"tenantId\":\"MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\",\"publicURL\":\"URL/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\"}],\"name\":\"cloudFilesCDN\",\"type\":\"rax:object-cdn\"},{\"endpoints\":[{\"region\":\"ORD\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v1.0/123123\"},{\"region\":\"DFW\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v1.0/123123\"}],\"name\":\"cloudLoadBalancers\",\"type\":\"rax:load-balancer\"},{\"
 
endpoints\":[{\"region\":\"DFW\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v1.0/123123\"},{\"region\":\"ORD\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v1.0/123123\"}],\"name\":\"cloudDatabases\",\"type\":\"rax:database\"},{\"endpoints\":[{\"region\":\"DFW\",\"tenantId\":\"MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\",\"publicURL\":\"URL/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\",\"internalURL\":\"URL/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\"},{\"region\":\"ORD\",\"tenantId\":\"MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\",\"publicURL\":\"URL/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\",\"internalURL\":\"URL/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\"}],\"name\":\"cloudFiles\",\"type\":\"object-store\"},{\"endpoints\":[{\"tenantId\":\"123123\",\"publicURL\":\"URL/v1.0/123123\",\"versionInfo\":\"URL/v1.0\",\"versionList\":\"URL/\",\"versionId\":\"1.0\"}],\"name\":\"cloudServers\",\"type\":\"compute\"},{\"endpoints\":[{\"re
 
gion\":\"DFW\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v2/123123\",\"versionInfo\":\"URL/v2\",\"versionList\":\"URL/\",\"versionId\":\"2\"},{\"region\":\"ORD\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v2/123123\",\"versionInfo\":\"URL/v2\",\"versionList\":\"URL/\",\"versionId\":\"2\"}],\"name\":\"cloudServersOpenStack\",\"type\":\"compute\"},{\"endpoints\":[{\"tenantId\":\"123123\",\"publicURL\":\"URL/v1.0/123123\"}],\"name\":\"cloudDNS\",\"type\":\"rax:dns\"},{\"endpoints\":[{\"tenantId\":\"123123\",\"publicURL\":\"URL/v1.0/123123\"}],\"name\":\"cloudBackup\",\"type\":\"rax:backup\"},{\"endpoints\":[{\"region\":\"DFW\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v1/123123\"},{\"region\":\"ORD\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v1/123123\"}],\"name\":\"cloudBlockStorage\",\"type\":\"volume\"}],\"user\":{\"id\":\"1234\",\"roles\":[{\"id\":\"3\",\"description\":\"User
 Admin 
Role.\",\"name\":\"identity:user-admin\"}],\"name\":\"jclouds-joe\",\"RAX-AUTH:defaultRegion\"
 :\"DFW\"}}}";
+
+   public A api(String uri, String provider, Properties overrides) {
+      overrides.setProperty(PROPERTY_MAX_RETRIES, "1");
+
+      return ContextBuilder.newBuilder(provider)
+            .credentials("jclouds:joe", "letmein")
+            .endpoint(uri)
+            .overrides(overrides)
+            .modules(modules)
+            .buildApi(new TypeToken<A>(getClass()) {});
+   }
+
+   public A api(String uri, String provider) {
+      return api(uri, provider, new Properties());
+   }
+
+   private final Set<Module> modules = ImmutableSet.<Module> of(new 
ExecutorServiceModule(sameThreadExecutor(),
+         sameThreadExecutor()));
+
+   public MockWebServer mockSwiftServer() throws IOException {
+      MockWebServer server = new MockWebServer();
+      server.play();
+      URL url = server.getUrl("");
+      server.setDispatcher(getURLReplacingQueueDispatcher(url));
+      return server;
+   }
+
+   /**
+    * there's no built-in way to defer evaluation of a response header, hence
+    * this method, which allows us to send back links to the mock server.
+    */
+   public QueueDispatcher getURLReplacingQueueDispatcher(final URL url) {
+      final QueueDispatcher dispatcher = new QueueDispatcher() {
+         protected final BlockingQueue<MockResponse> responseQueue = new 
LinkedBlockingQueue<MockResponse>();
+
+         @Override
+         public MockResponse dispatch(RecordedRequest request) throws 
InterruptedException {
+            MockResponse response = responseQueue.take();
+            if (response.getBody() != null) {
+               String newBody = new 
String(response.getBody()).replace(":\"URL", ":\"" + url.toString());
+               response = response.setBody(newBody);
+            }
+            return response;
+         }
+
+         @Override
+         public void enqueueResponse(MockResponse response) {
+            responseQueue.add(response);
+         }
+      };
+
+      return dispatcher;
+   }
+}

Reply via email to