|
|
|
@ -124,7 +124,7 @@ public class FeignTest {
@@ -124,7 +124,7 @@ public class FeignTest {
|
|
|
|
|
server.play(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, server.getUrl("").toString(), new TestInterface.Module()); |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, "http://localhost:" + server.getPort(), new TestInterface.Module()); |
|
|
|
|
|
|
|
|
|
final AtomicBoolean success = new AtomicBoolean(); |
|
|
|
|
|
|
|
|
@ -158,7 +158,7 @@ public class FeignTest {
@@ -158,7 +158,7 @@ public class FeignTest {
|
|
|
|
|
server.play(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, server.getUrl("").toString(), new TestInterface.Module()); |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, "http://localhost:" + server.getPort(), new TestInterface.Module()); |
|
|
|
|
|
|
|
|
|
final AtomicBoolean success = new AtomicBoolean(); |
|
|
|
|
|
|
|
|
@ -192,7 +192,7 @@ public class FeignTest {
@@ -192,7 +192,7 @@ public class FeignTest {
|
|
|
|
|
server.play(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, server.getUrl("").toString(), new TestInterface.Module()); |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, "http://localhost:" + server.getPort(), new TestInterface.Module()); |
|
|
|
|
|
|
|
|
|
final AtomicBoolean success = new AtomicBoolean(); |
|
|
|
|
|
|
|
|
@ -226,7 +226,7 @@ public class FeignTest {
@@ -226,7 +226,7 @@ public class FeignTest {
|
|
|
|
|
server.play(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, server.getUrl("").toString(), new TestInterface.Module()); |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, "http://localhost:" + server.getPort(), new TestInterface.Module()); |
|
|
|
|
|
|
|
|
|
api.login("netflix", "denominator", "password"); |
|
|
|
|
assertEquals(new String(server.takeRequest().getBody()), |
|
|
|
@ -243,7 +243,7 @@ public class FeignTest {
@@ -243,7 +243,7 @@ public class FeignTest {
|
|
|
|
|
server.play(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, server.getUrl("").toString(), new TestInterface.Module()); |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, "http://localhost:" + server.getPort(), new TestInterface.Module()); |
|
|
|
|
|
|
|
|
|
api.form("netflix", "denominator", "password"); |
|
|
|
|
assertEquals(new String(server.takeRequest().getBody()), |
|
|
|
@ -260,7 +260,7 @@ public class FeignTest {
@@ -260,7 +260,7 @@ public class FeignTest {
|
|
|
|
|
server.play(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, server.getUrl("").toString(), new TestInterface.Module()); |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, "http://localhost:" + server.getPort(), new TestInterface.Module()); |
|
|
|
|
|
|
|
|
|
api.body(Arrays.asList("netflix", "denominator", "password")); |
|
|
|
|
assertEquals(new String(server.takeRequest().getBody()), "[netflix, denominator, password]"); |
|
|
|
@ -275,29 +275,32 @@ public class FeignTest {
@@ -275,29 +275,32 @@ public class FeignTest {
|
|
|
|
|
String.class)), "TestInterface#uriParam(String,URI,String)"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "zone not found") |
|
|
|
|
public void canOverrideErrorDecoder() throws IOException, InterruptedException { |
|
|
|
|
@dagger.Module(overrides = true, includes = TestInterface.Module.class) class Overrides { |
|
|
|
|
@Provides @Singleton ErrorDecoder errorDecoder() { |
|
|
|
|
return new ErrorDecoder.Default() { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Exception decode(String methodKey, Response response) { |
|
|
|
|
if (response.status() == 404) |
|
|
|
|
return new IllegalArgumentException("zone not found"); |
|
|
|
|
return super.decode(methodKey, response); |
|
|
|
|
} |
|
|
|
|
@dagger.Module(overrides = true, library = true, includes = TestInterface.Module.class) |
|
|
|
|
static class IllegalArgumentExceptionOn404 { |
|
|
|
|
@Provides @Singleton ErrorDecoder errorDecoder() { |
|
|
|
|
return new ErrorDecoder.Default() { |
|
|
|
|
|
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
@Override |
|
|
|
|
public Exception decode(String methodKey, Response response) { |
|
|
|
|
if (response.status() == 404) |
|
|
|
|
return new IllegalArgumentException("zone not found"); |
|
|
|
|
return super.decode(methodKey, response); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "zone not found") |
|
|
|
|
public void canOverrideErrorDecoder() throws IOException, InterruptedException { |
|
|
|
|
|
|
|
|
|
final MockWebServer server = new MockWebServer(); |
|
|
|
|
server.enqueue(new MockResponse().setResponseCode(404).setBody("foo")); |
|
|
|
|
server.play(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, server.getUrl("").toString(), new Overrides()); |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, "http://localhost:" + server.getPort(), |
|
|
|
|
new IllegalArgumentExceptionOn404()); |
|
|
|
|
|
|
|
|
|
api.post(); |
|
|
|
|
} finally { |
|
|
|
@ -312,7 +315,7 @@ public class FeignTest {
@@ -312,7 +315,7 @@ public class FeignTest {
|
|
|
|
|
server.play(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, server.getUrl("").toString(), |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, "http://localhost:" + server.getPort(), |
|
|
|
|
new TestInterface.Module()); |
|
|
|
|
|
|
|
|
|
api.post(); |
|
|
|
@ -323,23 +326,26 @@ public class FeignTest {
@@ -323,23 +326,26 @@ public class FeignTest {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@dagger.Module(overrides = true, library = true, includes = TestInterface.Module.class) |
|
|
|
|
static class DecodeFail { |
|
|
|
|
@Provides(type = SET) Decoder decoder() { |
|
|
|
|
return new Decoder.TextStream<String>() { |
|
|
|
|
@Override |
|
|
|
|
public String decode(Reader reader, Type type) throws IOException { |
|
|
|
|
return "fail"; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void overrideTypeSpecificDecoder() throws IOException, InterruptedException { |
|
|
|
|
MockWebServer server = new MockWebServer(); |
|
|
|
|
server.enqueue(new MockResponse().setResponseCode(200).setBody("success!".getBytes())); |
|
|
|
|
server.play(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
@dagger.Module(overrides = true, includes = TestInterface.Module.class) class Overrides { |
|
|
|
|
@Provides(type = SET) Decoder decoder() { |
|
|
|
|
return new Decoder.TextStream<String>() { |
|
|
|
|
@Override |
|
|
|
|
public String decode(Reader reader, Type type) throws IOException { |
|
|
|
|
return "fail"; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, server.getUrl("").toString(), new Overrides()); |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, "http://localhost:" + server.getPort(), |
|
|
|
|
new DecodeFail()); |
|
|
|
|
|
|
|
|
|
assertEquals(api.post(), "fail"); |
|
|
|
|
} finally { |
|
|
|
@ -348,6 +354,21 @@ public class FeignTest {
@@ -348,6 +354,21 @@ public class FeignTest {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@dagger.Module(overrides = true, library = true, includes = TestInterface.Module.class) |
|
|
|
|
static class RetryableExceptionOnRetry { |
|
|
|
|
@Provides(type = SET) Decoder decoder() { |
|
|
|
|
return new StringDecoder() { |
|
|
|
|
@Override |
|
|
|
|
public String decode(Reader reader, Type type) throws RetryableException, IOException { |
|
|
|
|
String string = super.decode(reader, type); |
|
|
|
|
if ("retry!".equals(string)) |
|
|
|
|
throw new RetryableException(string, null); |
|
|
|
|
return string; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* when you must parse a 2xx status to determine if the operation succeeded or not. |
|
|
|
|
*/ |
|
|
|
@ -358,20 +379,8 @@ public class FeignTest {
@@ -358,20 +379,8 @@ public class FeignTest {
|
|
|
|
|
server.play(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
@dagger.Module(overrides = true, includes = TestInterface.Module.class) class Overrides { |
|
|
|
|
@Provides(type = SET) Decoder decoder() { |
|
|
|
|
return new StringDecoder() { |
|
|
|
|
@Override |
|
|
|
|
public String decode(Reader reader, Type type) throws RetryableException, IOException { |
|
|
|
|
String string = super.decode(reader, type); |
|
|
|
|
if ("retry!".equals(string)) |
|
|
|
|
throw new RetryableException(string, null); |
|
|
|
|
return string; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, server.getUrl("").toString(), new Overrides()); |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, "http://localhost:" + server.getPort(), |
|
|
|
|
new RetryableExceptionOnRetry()); |
|
|
|
|
|
|
|
|
|
assertEquals(api.post(), "success!"); |
|
|
|
|
} finally { |
|
|
|
@ -380,6 +389,18 @@ public class FeignTest {
@@ -380,6 +389,18 @@ public class FeignTest {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@dagger.Module(overrides = true, library = true, includes = TestInterface.Module.class) |
|
|
|
|
static class IOEOnDecode { |
|
|
|
|
@Provides(type = SET) Decoder decoder() { |
|
|
|
|
return new Decoder.TextStream<String>() { |
|
|
|
|
@Override |
|
|
|
|
public String decode(Reader reader, Type type) throws IOException { |
|
|
|
|
throw new IOException("error reading response"); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test(expectedExceptions = FeignException.class, expectedExceptionsMessageRegExp = "error reading response POST http://.*") |
|
|
|
|
public void doesntRetryAfterResponseIsSent() throws IOException, InterruptedException { |
|
|
|
|
MockWebServer server = new MockWebServer(); |
|
|
|
@ -387,17 +408,8 @@ public class FeignTest {
@@ -387,17 +408,8 @@ public class FeignTest {
|
|
|
|
|
server.play(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
@dagger.Module(overrides = true, includes = TestInterface.Module.class) class Overrides { |
|
|
|
|
@Provides(type = SET) Decoder decoder() { |
|
|
|
|
return new Decoder.TextStream<String>() { |
|
|
|
|
@Override |
|
|
|
|
public String decode(Reader reader, Type type) throws IOException { |
|
|
|
|
throw new IOException("error reading response"); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, server.getUrl("").toString(), new Overrides()); |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, "http://localhost:" + server.getPort(), |
|
|
|
|
new IOEOnDecode()); |
|
|
|
|
|
|
|
|
|
api.post(); |
|
|
|
|
} finally { |
|
|
|
@ -420,7 +432,7 @@ public class FeignTest {
@@ -420,7 +432,7 @@ public class FeignTest {
|
|
|
|
|
server.play(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, server.getUrl("").toString(), |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, "https://localhost:" + server.getPort(), |
|
|
|
|
new TestInterface.Module(), new TrustSSLSockets()); |
|
|
|
|
api.post(); |
|
|
|
|
} finally { |
|
|
|
@ -436,7 +448,7 @@ public class FeignTest {
@@ -436,7 +448,7 @@ public class FeignTest {
|
|
|
|
|
server.play(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, server.getUrl("").toString(), |
|
|
|
|
TestInterface api = Feign.create(TestInterface.class, "https://localhost:" + server.getPort(), |
|
|
|
|
new TestInterface.Module(), new TrustSSLSockets()); |
|
|
|
|
api.post(); |
|
|
|
|
assertEquals(server.getRequestCount(), 2); |
|
|
|
|