增加测试用例
This commit is contained in:
@@ -202,7 +202,7 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
|||||||
final DefaultDataBatch dataBatch = (DefaultDataBatch) batch;
|
final DefaultDataBatch dataBatch = (DefaultDataBatch) batch;
|
||||||
if (dataBatch.actions.isEmpty()) {
|
if (dataBatch.actions.isEmpty()) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int c = 0;
|
int c = 0;
|
||||||
Connection conn = null;
|
Connection conn = null;
|
||||||
try {
|
try {
|
||||||
@@ -2548,6 +2548,13 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
|||||||
public ConnectionPool(Properties prop) {
|
public ConnectionPool(Properties prop) {
|
||||||
this.connectTimeoutSeconds = Integer.decode(prop.getProperty(DATA_SOURCE_CONNECTTIMEOUT_SECONDS, "6"));
|
this.connectTimeoutSeconds = Integer.decode(prop.getProperty(DATA_SOURCE_CONNECTTIMEOUT_SECONDS, "6"));
|
||||||
int defMaxConns = Utility.cpus() * 4;
|
int defMaxConns = Utility.cpus() * 4;
|
||||||
|
if (workExecutor instanceof ThreadPoolExecutor) {
|
||||||
|
defMaxConns = ((ThreadPoolExecutor) workExecutor).getCorePoolSize();
|
||||||
|
} else if (workExecutor instanceof ThreadHashExecutor) {
|
||||||
|
defMaxConns = ((ThreadHashExecutor) workExecutor).getCorePoolSize();
|
||||||
|
} else if (workExecutor != null) { //maybe virtual thread pool
|
||||||
|
defMaxConns = Math.min(1000, Utility.cpus() * 100);
|
||||||
|
}
|
||||||
this.maxConns = Math.max(1, Integer.decode(prop.getProperty(DATA_SOURCE_MAXCONNS, "" + defMaxConns)));
|
this.maxConns = Math.max(1, Integer.decode(prop.getProperty(DATA_SOURCE_MAXCONNS, "" + defMaxConns)));
|
||||||
this.queue = new ArrayBlockingQueue<>(maxConns);
|
this.queue = new ArrayBlockingQueue<>(maxConns);
|
||||||
this.url = prop.getProperty(DATA_SOURCE_URL);
|
this.url = prop.getProperty(DATA_SOURCE_URL);
|
||||||
|
|||||||
37
src/test/java/org/redkale/test/http/RestSleepService.java
Normal file
37
src/test/java/org/redkale/test/http/RestSleepService.java
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.redkale.test.http;
|
||||||
|
|
||||||
|
import org.redkale.net.http.RestService;
|
||||||
|
import org.redkale.service.AbstractService;
|
||||||
|
import org.redkale.util.Utility;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author zhangjx
|
||||||
|
*/
|
||||||
|
@RestService(name = "test", automapping = true)
|
||||||
|
public class RestSleepService extends AbstractService {
|
||||||
|
|
||||||
|
public String sleep200() {
|
||||||
|
Utility.sleep(200);
|
||||||
|
System.out.println("当前执行线程: " + Thread.currentThread().getName());
|
||||||
|
return "ok200";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String sleep300() {
|
||||||
|
Utility.sleep(300);
|
||||||
|
return "ok300";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String sleep400() {
|
||||||
|
Utility.sleep(400);
|
||||||
|
return "ok400";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String sleep500() {
|
||||||
|
Utility.sleep(500);
|
||||||
|
return "ok500";
|
||||||
|
}
|
||||||
|
}
|
||||||
73
src/test/java/org/redkale/test/http/RestSleepTest.java
Normal file
73
src/test/java/org/redkale/test/http/RestSleepTest.java
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.redkale.test.http;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.*;
|
||||||
|
import org.junit.jupiter.api.*;
|
||||||
|
import org.redkale.boot.Application;
|
||||||
|
import org.redkale.convert.bson.BsonConvert;
|
||||||
|
import org.redkale.convert.json.JsonConvert;
|
||||||
|
import org.redkale.net.AsyncIOGroup;
|
||||||
|
import org.redkale.net.http.*;
|
||||||
|
import org.redkale.net.sncp.Sncp;
|
||||||
|
import org.redkale.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author zhangjx
|
||||||
|
*/
|
||||||
|
public class RestSleepTest {
|
||||||
|
|
||||||
|
private boolean main;
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Throwable {
|
||||||
|
RestSleepTest test = new RestSleepTest();
|
||||||
|
test.main = true;
|
||||||
|
test.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void run() throws Exception {
|
||||||
|
System.out.println("------------------- 并发调用 -----------------------------------");
|
||||||
|
final Application application = Application.create(true);
|
||||||
|
final AsyncIOGroup asyncGroup = new AsyncIOGroup(8192, 16);
|
||||||
|
asyncGroup.start();
|
||||||
|
final ResourceFactory resFactory = ResourceFactory.create();
|
||||||
|
resFactory.register(JsonConvert.root());
|
||||||
|
resFactory.register(BsonConvert.root());
|
||||||
|
|
||||||
|
//------------------------ 初始化 CService ------------------------------------
|
||||||
|
RestSleepService service = Sncp.createSimpleLocalService(RestSleepService.class, resFactory);
|
||||||
|
HttpServer server = new HttpServer(application, System.currentTimeMillis(), resFactory);
|
||||||
|
server.getResourceFactory().register(application);
|
||||||
|
System.out.println("servlet = " + server.addRestServlet(null, service, null, HttpServlet.class, ""));
|
||||||
|
server.init(AnyValue.DefaultAnyValue.create("port", 0));
|
||||||
|
server.start();
|
||||||
|
|
||||||
|
int port = server.getSocketAddress().getPort();
|
||||||
|
System.out.println("服务器启动端口: " + port);
|
||||||
|
InetSocketAddress httpAddress = new InetSocketAddress("127.0.0.1", port);
|
||||||
|
Socket socket = new Socket(httpAddress.getAddress(), port);
|
||||||
|
OutputStream out = socket.getOutputStream();
|
||||||
|
out.write(("GET /test/sleep200 HTTP/1.1\r\n"
|
||||||
|
+ "Connection: Keep-Alive\r\n"
|
||||||
|
+ "\r\n"
|
||||||
|
+ "GET /test/sleep300 HTTP/1.1\r\n"
|
||||||
|
+ "Connection: Keep-Alive\r\n"
|
||||||
|
+ "\r\n"
|
||||||
|
+ "GET /test/sleep500 HTTP/1.1\r\n"
|
||||||
|
+ "Connection: Keep-Alive\r\n"
|
||||||
|
+ "\r\n").getBytes());
|
||||||
|
InputStream in = socket.getInputStream();
|
||||||
|
byte[] bytes = new byte[8192];
|
||||||
|
long s = System.currentTimeMillis();
|
||||||
|
int pos = in.read(bytes);
|
||||||
|
long e = System.currentTimeMillis() - s;
|
||||||
|
System.out.println("返回结果: " + new String(bytes, 0, pos));
|
||||||
|
System.out.println("耗时: " + e + " ms");
|
||||||
|
server.shutdown();
|
||||||
|
Assertions.assertTrue(e < 600);
|
||||||
|
}
|
||||||
|
}
|
||||||
36
src/test/java/org/redkale/test/sncp/SncpSleepService.java
Normal file
36
src/test/java/org/redkale/test/sncp/SncpSleepService.java
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.redkale.test.sncp;
|
||||||
|
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import org.redkale.service.AbstractService;
|
||||||
|
import org.redkale.util.Utility;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author zhangjx
|
||||||
|
*/
|
||||||
|
public class SncpSleepService extends AbstractService {
|
||||||
|
|
||||||
|
public CompletableFuture<String> sleep200() {
|
||||||
|
return (CompletableFuture) CompletableFuture.supplyAsync(() -> {
|
||||||
|
Utility.sleep(200);
|
||||||
|
return "ok200";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public CompletableFuture<String> sleep300() {
|
||||||
|
return (CompletableFuture) CompletableFuture.supplyAsync(() -> {
|
||||||
|
Utility.sleep(300);
|
||||||
|
return "ok300";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public CompletableFuture<String> sleep500() {
|
||||||
|
return (CompletableFuture) CompletableFuture.supplyAsync(() -> {
|
||||||
|
Utility.sleep(500);
|
||||||
|
return "ok500";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
65
src/test/java/org/redkale/test/sncp/SncpSleepTest.java
Normal file
65
src/test/java/org/redkale/test/sncp/SncpSleepTest.java
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
package org.redkale.test.sncp;
|
||||||
|
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import org.junit.jupiter.api.*;
|
||||||
|
import org.redkale.boot.Application;
|
||||||
|
import org.redkale.convert.bson.BsonConvert;
|
||||||
|
import org.redkale.convert.json.JsonConvert;
|
||||||
|
import org.redkale.net.AsyncIOGroup;
|
||||||
|
import org.redkale.net.client.ClientAddress;
|
||||||
|
import org.redkale.net.sncp.*;
|
||||||
|
import org.redkale.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author zhangjx
|
||||||
|
*/
|
||||||
|
public class SncpSleepTest {
|
||||||
|
|
||||||
|
private boolean main;
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Throwable {
|
||||||
|
SncpSleepTest test = new SncpSleepTest();
|
||||||
|
test.main = true;
|
||||||
|
test.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void run() throws Exception {
|
||||||
|
System.out.println("------------------- 并发调用 -----------------------------------");
|
||||||
|
final Application application = Application.create(true);
|
||||||
|
final AsyncIOGroup asyncGroup = new AsyncIOGroup(8192, 16);
|
||||||
|
asyncGroup.start();
|
||||||
|
final ResourceFactory resFactory = ResourceFactory.create();
|
||||||
|
resFactory.register(JsonConvert.root());
|
||||||
|
resFactory.register(BsonConvert.root());
|
||||||
|
|
||||||
|
//------------------------ 初始化 CService ------------------------------------
|
||||||
|
SncpSleepService service = Sncp.createSimpleLocalService(SncpSleepService.class, resFactory);
|
||||||
|
SncpServer server = new SncpServer(application, System.currentTimeMillis(), null, resFactory);
|
||||||
|
server.getResourceFactory().register(application);
|
||||||
|
server.addSncpServlet(service);
|
||||||
|
server.init(AnyValue.DefaultAnyValue.create("port", 0));
|
||||||
|
server.start();
|
||||||
|
|
||||||
|
int port = server.getSocketAddress().getPort();
|
||||||
|
System.out.println("服务器启动端口: " + port);
|
||||||
|
InetSocketAddress sncpAddress = new InetSocketAddress("127.0.0.1", port);
|
||||||
|
final SncpClient client = new SncpClient("", asyncGroup, sncpAddress, new ClientAddress(sncpAddress), "TCP", 16, 100);
|
||||||
|
final SncpRpcGroups rpcGroups = application.getSncpRpcGroups();
|
||||||
|
rpcGroups.computeIfAbsent("cs", "TCP").putAddress(sncpAddress);
|
||||||
|
SncpSleepService remoteCService = Sncp.createSimpleRemoteService(SncpSleepService.class, resFactory, rpcGroups, client, "cs");
|
||||||
|
long s = System.currentTimeMillis();
|
||||||
|
CompletableFuture[] futures = new CompletableFuture[]{
|
||||||
|
remoteCService.sleep200(),
|
||||||
|
remoteCService.sleep300(),
|
||||||
|
remoteCService.sleep500()
|
||||||
|
};
|
||||||
|
CompletableFuture.allOf(futures).join();
|
||||||
|
long e = System.currentTimeMillis() - s;
|
||||||
|
System.out.println("耗时: " + e + " ms");
|
||||||
|
server.shutdown();
|
||||||
|
Assertions.assertTrue(e < 600);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user