Java tutorial
/* * Copyright 2007 Yusuke Yamamoto * * 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 twitter4j; import com.squareup.okhttp.ConnectionPool; import com.squareup.okhttp.OkHttpClient; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import java.lang.reflect.Field; /** * Test case for HttpCient * * @author Hiroaki Takeuchi - takke30 at gmail.com * @since Twitter4J 3.0.6 */ public class SpdyHttpClientTest extends TestCase { // specify running order public static Test suite() { TestSuite suite = new TestSuite(); suite.addTest(new SpdyHttpClientTest("testNoPreferOption")); // must be called first suite.addTest(new SpdyHttpClientTest("testHttp2")); suite.addTest(new SpdyHttpClientTest("testSpdy")); suite.addTest(new SpdyHttpClientTest("testNoSpdy")); return suite; } public SpdyHttpClientTest(String name) { super(name); } protected void tearDown() { } public void testNoPreferOption() throws Exception { AlternativeHttpClientImpl http = callOembed(); // check HTTP/2.0 Field f = http.getClass().getDeclaredField("client"); f.setAccessible(true); OkHttpClient client = (OkHttpClient) f.get(http); assertNotNull("ensure that OkHttpClient is used", client); ConnectionPool p = client.getConnectionPool(); assertEquals(1, p.getConnectionCount()); assertEquals(0, p.getHttpConnectionCount()); assertEquals(1, p.getSpdyConnectionCount()); assertEquals("HTTP-draft-09/2.0", http.getLastRequestProtocol()); } public void testSpdy() throws Exception { AlternativeHttpClientImpl.sPreferSpdy = true; AlternativeHttpClientImpl.sPreferHttp2 = false; AlternativeHttpClientImpl http = callOembed(); // check SPDY Field f = http.getClass().getDeclaredField("client"); f.setAccessible(true); OkHttpClient client = (OkHttpClient) f.get(http); assertNotNull("ensure that OkHttpClient is used", client); ConnectionPool p = client.getConnectionPool(); assertEquals(1, p.getConnectionCount()); assertEquals(0, p.getHttpConnectionCount()); assertEquals(1, p.getSpdyConnectionCount()); assertEquals("spdy/3.1", http.getLastRequestProtocol()); } public void testHttp2() throws Exception { AlternativeHttpClientImpl.sPreferSpdy = false; AlternativeHttpClientImpl.sPreferHttp2 = true; AlternativeHttpClientImpl http = callOembed(); // check HTTP/2.0 Field f = http.getClass().getDeclaredField("client"); f.setAccessible(true); OkHttpClient client = (OkHttpClient) f.get(http); assertNotNull("ensure that OkHttpClient is used", client); ConnectionPool p = client.getConnectionPool(); assertEquals(1, p.getConnectionCount()); assertEquals(0, p.getHttpConnectionCount()); assertEquals(1, p.getSpdyConnectionCount()); assertEquals("HTTP-draft-09/2.0", http.getLastRequestProtocol()); } public void testNoSpdy() throws Exception { AlternativeHttpClientImpl.sPreferSpdy = false; AlternativeHttpClientImpl.sPreferHttp2 = false; AlternativeHttpClientImpl http = callOembed(); // check not SPDY Field f = http.getClass().getDeclaredField("client"); f.setAccessible(true); OkHttpClient client = (OkHttpClient) f.get(http); assertNull(client); // OkHttpClient was NOT used } private AlternativeHttpClientImpl callOembed() throws TwitterException, JSONException { AlternativeHttpClientImpl http = new AlternativeHttpClientImpl(); String url = "https://api.twitter.com/1/statuses/oembed.json?id=441617258578583554"; HttpRequest req = new HttpRequest(RequestMethod.GET, url, null, null, null); // just to ensure the response body is consumed http.request(req).asJSONObject(); return http; } }