/* * Copyright 2013 Netflix, Inc. * * Licensed 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 feign; import com.google.common.base.Joiner; import com.google.common.io.ByteStreams; import com.google.common.io.CharStreams; import com.google.mockwebserver.MockResponse; import com.google.mockwebserver.MockWebServer; import com.google.mockwebserver.RecordedRequest; import com.google.mockwebserver.SocketPolicy; import dagger.Module; import dagger.Provides; import feign.codec.Decoder; import feign.codec.Encoder; import feign.codec.ErrorDecoder; import feign.codec.StringDecoder; import org.testng.annotations.Test; import javax.inject.Named; import javax.inject.Singleton; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLSocketFactory; import java.io.IOException; import java.lang.reflect.Type; import java.net.URI; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.concurrent.Executor; import static dagger.Provides.Type.SET; import static feign.Util.UTF_8; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNull; import static org.testng.Assert.assertTrue; @Test // unbound wildcards are not currently injectable in dagger. @SuppressWarnings("rawtypes") public class FeignTest { interface TestInterface { @RequestLine("POST /") Response response(); @RequestLine("POST /") String post(); @RequestLine("POST /") @Body("%7B\"customer_name\": \"{customer_name}\", \"user_name\": \"{user_name}\", \"password\": \"{password}\"%7D") void login( @Named("customer_name") String customer, @Named("user_name") String user, @Named("password") String password); @RequestLine("POST /") void body(List contents); @RequestLine("POST /") @Headers("Content-Encoding: gzip") void gzipBody(List contents); @RequestLine("POST /") void form( @Named("customer_name") String customer, @Named("user_name") String user, @Named("password") String password); @RequestLine("GET /{1}/{2}") Response uriParam(@Named("1") String one, URI endpoint, @Named("2") String two); @RequestLine("GET /?1={1}&2={2}") Response queryParams(@Named("1") String one, @Named("2") Iterable twos); @dagger.Module(injects = Feign.class, addsTo = Feign.Defaults.class) static class Module { @Provides Decoder defaultDecoder() { return new Decoder.Default(); } @Provides Encoder defaultEncoder() { return new Encoder() { @Override public void encode(Object object, RequestTemplate template) { if (object instanceof Map) { template.body(Joiner.on(',').withKeyValueSeparator("=").join((Map) object));