插件开发工具库,推荐依赖该工具库。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

153 lines
5.7 KiB

package com.fanruan.api.net.http;
import com.fanruan.api.Prepare;
import com.fanruan.api.net.http.rs.HttpRequest;
import com.fanruan.api.net.http.rs.HttpResponseType;
import com.fanruan.api.net.http.rs.StreamResponseHandle;
import com.fanruan.api.util.IOKit;
import com.fr.json.JSONObject;
import okhttp3.HttpUrl;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
import okhttp3.mockwebserver.RecordedRequest;
import org.junit.AfterClass;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketTimeoutException;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
/**
* @author richie
* @version 10.0
* Created by richie on 2019-08-29
*/
public class HttpKitTest extends Prepare {
private static MockWebServer server = new MockWebServer();
@AfterClass
public static void tearDown() throws Exception {
server.shutdown();
}
@Test
public void testGet() {
String text = null;
try {
text = HttpKit.get("http://www.baidu.com");
} catch (IOException e) {
e.printStackTrace();
}
assertNotNull(text);
}
@Test
public void testPost() {
Map<String, String> map = new HashMap<String, String>();
map.put("key", "bbs");
try {
String resText = HttpKit.post("https://cloud.fanruan.com/site", map);
assertEquals("http://bbs.fanruan.com/", new JSONObject(resText).get("value"));
} catch (SocketTimeoutException ignore) {
} catch (Exception e) {
e.printStackTrace();
fail();
}
}
@Test
public void testStream() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("key", "bbs");
try {
InputStream in = HttpKit.post("https://cloud.fanruan.com/site", map, HttpResponseType.STREAM);
String text = IOKit.inputStream2String(in, StandardCharsets.UTF_8);
assertEquals("{\"value\":\"http://bbs.fanruan.com/\"}", text);
} catch (SocketTimeoutException ignore) {
} catch (Exception e) {
e.printStackTrace();
fail();
}
}
@Test
public void testStreamMock() {
server.enqueue(new MockResponse().setBody("{\"value\":\"http://bbs.fanruan.com/\"}"));
String url = server.url("/site").toString();
Map<String, String> map = new HashMap<String, String>();
map.put("key", "bbs");
try {
InputStream in = HttpKit.executeAndParse(HttpRequest
.custom()
.url(url)
.post(map)
.build(),
new StreamResponseHandle());
String text = IOKit.inputStream2String(in, StandardCharsets.UTF_8);
RecordedRequest takeRequest = server.takeRequest();
assertEquals("{\"value\":\"http://bbs.fanruan.com/\"}", text);
assertEquals("POST", takeRequest.getMethod());
assertEquals("key=bbs", takeRequest.getBody().readUtf8());
} catch (SocketTimeoutException ignore) {
} catch (Exception e) {
e.printStackTrace();
fail();
}
}
@Test
public void testMethod() throws Exception {
server.enqueue(new MockResponse().setBody("get"));
server.enqueue(new MockResponse().setBody("post"));
server.enqueue(new MockResponse().setBody("put"));
server.enqueue(new MockResponse().setBody("delete"));
String url = server.url("/v1/chat/").toString();
HttpKit.get(url);
assertEquals(server.takeRequest().getMethod(), "GET");
HttpKit.post(url, Collections.<String, String>emptyMap());
assertEquals(server.takeRequest().getMethod(), "POST");
HttpKit.executeAndParse(HttpRequest.custom().url(url).put(Collections.<String, String>emptyMap()).build());
assertEquals(server.takeRequest().getMethod(), "PUT");
HttpKit.executeAndParse(HttpRequest.custom().url(url).delete().build());
assertEquals(server.takeRequest().getMethod(), "DELETE");
}
@Test
public void testHeader() throws Exception {
server.enqueue(new MockResponse().setBody("hello, world!"));
HttpUrl baseUrl = server.url("/v1/chat/");
HashMap<String, String> headers = new HashMap<String, String>(1);
headers.put("Authorization", "abc");
String s = HttpKit.executeAndParse(HttpRequest.custom().url(baseUrl.toString()).post(Collections.<String, String>emptyMap()).headers(headers).build());
assertEquals("hello, world!", s);
// 测试请求头
RecordedRequest request = server.takeRequest();
assertEquals(request.getHeader("Authorization"), "abc");
assertEquals("POST /v1/chat/ HTTP/1.1", request.getRequestLine());
}
@Test
public void testParams() throws Exception {
server.enqueue(new MockResponse().setBody("hello, world!"));
HttpUrl baseUrl = server.url("/v1/chat/");
HashMap<String, String> params = new HashMap<String, String>(1);
params.put("key", "value");
String s = HttpKit.executeAndParse(HttpRequest.custom().url(baseUrl.toString()).post(params).build());
assertEquals("hello, world!", s);
// 测试参数
RecordedRequest request = server.takeRequest();
assertEquals("key=value", request.getBody().readUtf8());
assertEquals("POST /v1/chat/ HTTP/1.1", request.getRequestLine());
}
}