Skip to content
This repository was archived by the owner on Mar 25, 2018. It is now read-only.

Commit 3ec6313

Browse files
author
Adrian Cole
committed
Merge pull request #1559 from jclouds/cleanup-terremark-mock
cleaned up style in mock responses that need to consider the port of the current MockWebServer
2 parents 630d4cf + 592d27f commit 3ec6313

File tree

1 file changed

+13
-20
lines changed

1 file changed

+13
-20
lines changed

providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/TerremarkECloudClientMockTest.java

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,10 @@
2323
import static org.testng.Assert.assertEquals;
2424

2525
import java.io.IOException;
26-
import java.net.URL;
2726
import java.util.Properties;
2827
import java.util.Set;
2928
import java.util.concurrent.BlockingQueue;
3029
import java.util.concurrent.LinkedBlockingQueue;
31-
import java.util.concurrent.atomic.AtomicReference;
3230

3331
import org.jclouds.ContextBuilder;
3432
import org.jclouds.concurrent.config.ExecutorServiceModule;
@@ -59,54 +57,51 @@ static TerremarkECloudClient mockTerremarkECloudClient(String uri) {
5957
.endpoint(uri)
6058
.overrides(overrides)
6159
.modules(modules)
62-
.build(TerremarkECloudApiMetadata.CONTEXT_TOKEN).getApi();
60+
.buildApi(TerremarkECloudClient.class);
6361
}
6462

6563
String versionXML = "<SupportedVersions><VersionInfo><Version>0.8b-ext2.8</Version><LoginUrl>URLv0.8/login</LoginUrl></VersionInfo></SupportedVersions>";
6664

6765
@Test
6866
public void testLoginSetsContentLength() throws IOException, InterruptedException {
6967
MockWebServer server = new MockWebServer();
70-
AtomicReference<URL> url = setURLReplacingDispatcher(server);
68+
server.play();
69+
server.setDispatcher(replaceURLWithLocalhostPort(server.getPort()));
7170
server.enqueue(new MockResponse().setResponseCode(200).setBody(versionXML));
7271
server.enqueue(new MockResponse().setResponseCode(200)
7372
.addHeader("x-vcloud-authorization", "cookie")
7473
.setBody("<OrgList />"));
75-
server.play();
76-
url.set(server.getUrl("/"));
7774

78-
TerremarkECloudClient api = mockTerremarkECloudClient(url.get().toString());
75+
TerremarkECloudClient api = mockTerremarkECloudClient(server.getUrl("/").toString());
7976

8077
try {
8178
api.listOrgs();
82-
} finally {
8379
RecordedRequest getVersions = server.takeRequest();
8480
assertEquals(getVersions.getRequestLine(), "GET /versions HTTP/1.1");
8581

8682
RecordedRequest login = server.takeRequest();
8783
assertEquals(login.getRequestLine(), "POST /v0.8/login HTTP/1.1");
8884
assertEquals(login.getHeader("Authorization"), "Basic dXNlcjpwYXNzd29yZA==");
8985
assertEquals(login.getHeader("Content-Length"), "0");
90-
86+
} finally {
9187
server.shutdown();
9288
}
9389
}
9490

95-
/**
96-
* there's no built-in way to defer evaluation of a response header, hence this
97-
* method, which allows us to send back links to the mock server.
98-
*/
99-
private AtomicReference<URL> setURLReplacingDispatcher(MockWebServer server) {
100-
final AtomicReference<URL> url = new AtomicReference<URL>();
101-
102-
final QueueDispatcher dispatcher = new QueueDispatcher() {
91+
/**
92+
* this pattern is used for HATEOAS or similar apis which return urls for
93+
* further requests. If we don't replace here, the test cannot be bound to
94+
* the same MWS instance as it was created with.
95+
*/
96+
private QueueDispatcher replaceURLWithLocalhostPort(final int port) {
97+
return new QueueDispatcher() {
10398
protected final BlockingQueue<MockResponse> responseQueue = new LinkedBlockingQueue<MockResponse>();
10499

105100
@Override
106101
public MockResponse dispatch(RecordedRequest request) throws InterruptedException {
107102
MockResponse response = responseQueue.take();
108103
if (response.getBody() != null) {
109-
String newBody = new String(response.getBody()).replace("URL", url.get().toString());
104+
String newBody = new String(response.getBody()).replace("URL", "http://localhost:" + port + "/");
110105
response = response.setBody(newBody);
111106
}
112107
return response;
@@ -117,7 +112,5 @@ public void enqueueResponse(MockResponse response) {
117112
responseQueue.add(response);
118113
}
119114
};
120-
server.setDispatcher(dispatcher);
121-
return url;
122115
}
123116
}

0 commit comments

Comments
 (0)