restful routes predicates filters 的功能测试.
This commit is contained in:
parent
9c49ced6ed
commit
6037e1a58a
|
@ -151,26 +151,27 @@ public class DubboGatewayFilterFactory extends AbstractGatewayFilterFactory<Dubb
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result == null) {
|
if (result == null) {
|
||||||
response.setComplete().block();
|
result = HttpStatus.OK.getReasonPhrase();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result.getClass() != String.class) {
|
||||||
|
response.writeWith(Mono.just(response.bufferFactory()
|
||||||
|
.wrap(ByteBuffer.wrap(JSON.toJSONString(result).getBytes())))).block();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.getClass() == String.class) {
|
response.writeWith(Mono.just(
|
||||||
response.writeWith(Mono.just(
|
response.bufferFactory().wrap(ByteBuffer.wrap(((String) result).getBytes())))).block();
|
||||||
response.bufferFactory().wrap(ByteBuffer.wrap(((String) result).getBytes()))));
|
|
||||||
} else {
|
|
||||||
response.writeWith(Mono.just(response.bufferFactory()
|
|
||||||
.wrap(ByteBuffer.wrap(JSON.toJSONString(result).getBytes()))));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
response.setStatusCode(statusCode);
|
|
||||||
}
|
result = statusCode.getReasonPhrase();
|
||||||
|
response.writeWith(Mono.just(
|
||||||
|
response.bufferFactory().wrap(ByteBuffer.wrap(((String) result).getBytes())))).block();
|
||||||
return;
|
return;
|
||||||
// response.setComplete().block();
|
|
||||||
// return chain.filter(exchange);
|
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -371,9 +371,7 @@ public class ConfigGateway implements RouteDefinitionLocator {
|
||||||
String yamlField) {
|
String yamlField) {
|
||||||
List<String> filtersYaml = iter.get(yamlField);
|
List<String> filtersYaml = iter.get(yamlField);
|
||||||
if (filtersYaml != null) {
|
if (filtersYaml != null) {
|
||||||
|
|
||||||
filters.addAll(defaultFilters);
|
filters.addAll(defaultFilters);
|
||||||
|
|
||||||
for (String filterString : filtersYaml) {
|
for (String filterString : filtersYaml) {
|
||||||
filters.add(new FilterDefinition(filterString));
|
filters.add(new FilterDefinition(filterString));
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,10 +7,6 @@ import org.apache.dubbo.rpc.service.GenericService;
|
||||||
public class Extract {
|
public class Extract {
|
||||||
public static String getReferenceConfigKey(ReferenceConfig<GenericService> referenceConfig) {
|
public static String getReferenceConfigKey(ReferenceConfig<GenericService> referenceConfig) {
|
||||||
String iName = referenceConfig.getInterface();
|
String iName = referenceConfig.getInterface();
|
||||||
if (StringUtils.isBlank(iName)) {
|
|
||||||
Class<?> clazz = referenceConfig.getInterfaceClass();
|
|
||||||
iName = clazz.getName();
|
|
||||||
}
|
|
||||||
if (StringUtils.isBlank(iName)) {
|
if (StringUtils.isBlank(iName)) {
|
||||||
throw new IllegalArgumentException("No interface info in ReferenceConfig" + referenceConfig);
|
throw new IllegalArgumentException("No interface info in ReferenceConfig" + referenceConfig);
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ dubbo:
|
||||||
interface: ocean.demo.api.IExchange
|
interface: ocean.demo.api.IExchange
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
predicates:
|
predicates:
|
||||||
- Path=/dubbo/hello
|
- Path=/dubbo/say
|
||||||
filters:
|
filters:
|
||||||
- SetRequestHeader=params, SetHeader
|
- SetRequestHeader=params, SetHeader
|
||||||
|
|
||||||
|
|
33
usergw-service/src/main/resources/test-gateway3.yaml
Normal file
33
usergw-service/src/main/resources/test-gateway3.yaml
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
default-filters:
|
||||||
|
- AddResponseHeader=X-Response-Default-Foo, Test-Default-Bar
|
||||||
|
|
||||||
|
restful: # filters 必须 有predicates uri只是预期到达的地址
|
||||||
|
routes:
|
||||||
|
- id: redirect_to
|
||||||
|
uri: http://localhost:8888/http/xixi
|
||||||
|
order: 11
|
||||||
|
predicates:
|
||||||
|
- Path=http://localhost:8888/http/xixi
|
||||||
|
filters:
|
||||||
|
- RedirectTo=302, http://localhost:8888/http/hello
|
||||||
|
|
||||||
|
dubbo:
|
||||||
|
routes:
|
||||||
|
- id: test
|
||||||
|
application: dubbo-exchange
|
||||||
|
# methods: # 如果没填就从 request拿 意味着所有接口都可以使用
|
||||||
|
|
||||||
|
# - name: Say
|
||||||
|
# param-types:
|
||||||
|
# - java.lang.String
|
||||||
|
# - name: Hello
|
||||||
|
|
||||||
|
connections: 4
|
||||||
|
group: test
|
||||||
|
registry: zookeeper://127.0.0.1:2181
|
||||||
|
interface: ocean.demo.api.IExchange
|
||||||
|
version: 1.0.0
|
||||||
|
predicates:
|
||||||
|
- Path=/dubbo/hello
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.ecpark.service.usergw.utils;
|
package cn.ecpark.service.usergw;
|
||||||
|
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
@ -6,11 +6,9 @@ import org.junit.runner.RunWith;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||||
import org.springframework.boot.web.server.LocalServerPort;
|
import org.springframework.boot.web.server.LocalServerPort;
|
||||||
import org.springframework.cloud.gateway.handler.FilteringWebHandler;
|
|
||||||
import org.springframework.test.context.TestPropertySource;
|
import org.springframework.test.context.TestPropertySource;
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
|
||||||
import cn.ecpark.service.usergw.App;
|
|
||||||
import reactor.netty.http.client.HttpClient;
|
import reactor.netty.http.client.HttpClient;
|
||||||
import reactor.netty.http.client.HttpClient.ResponseReceiver;
|
import reactor.netty.http.client.HttpClient.ResponseReceiver;
|
||||||
import reactor.netty.http.client.HttpClientResponse;
|
import reactor.netty.http.client.HttpClientResponse;
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.ecpark.service.usergw.utils;
|
package cn.ecpark.service.usergw;
|
||||||
|
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
@ -6,13 +6,9 @@ import org.junit.runner.RunWith;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||||
import org.springframework.boot.web.server.LocalServerPort;
|
import org.springframework.boot.web.server.LocalServerPort;
|
||||||
import org.springframework.cloud.gateway.filter.factory.SetRequestHeaderGatewayFilterFactory;
|
|
||||||
import org.springframework.cloud.gateway.filter.factory.SetStatusGatewayFilterFactory;
|
|
||||||
import org.springframework.test.context.TestPropertySource;
|
import org.springframework.test.context.TestPropertySource;
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
|
||||||
import cn.ecpark.service.usergw.App;
|
|
||||||
import reactor.core.publisher.Mono;
|
|
||||||
import reactor.netty.http.client.HttpClient;
|
import reactor.netty.http.client.HttpClient;
|
||||||
import reactor.netty.http.client.HttpClient.ResponseReceiver;
|
import reactor.netty.http.client.HttpClient.ResponseReceiver;
|
||||||
import reactor.netty.http.client.HttpClientResponse;
|
import reactor.netty.http.client.HttpClientResponse;
|
||||||
|
@ -33,30 +29,16 @@ public class TestHttp2DubboConfig2 {
|
||||||
HttpClient client = HttpClient.create();
|
HttpClient client = HttpClient.create();
|
||||||
ResponseReceiver<?> receiver;
|
ResponseReceiver<?> receiver;
|
||||||
String content;
|
String content;
|
||||||
// receiver = client.baseUrl("http://localhost:" + serverPort + "/dubbo/hello").headers(
|
|
||||||
// h -> h.set("method", "Say").add("param-types", "java.lang.String").add("params", "Test-MyHttp2dubbo"))
|
|
||||||
// .get();
|
|
||||||
|
|
||||||
// HttpClientResponse resp = receiver.response().block();
|
|
||||||
// Assert.assertNotNull(resp);
|
|
||||||
|
|
||||||
// content = receiver.responseContent().asString().blockLast();
|
|
||||||
// Assert.assertEquals(resp.status().code(), 200);
|
|
||||||
// Assert.assertNotNull(content);
|
|
||||||
// Assert.assertEquals(content, "SetHeader");
|
|
||||||
|
|
||||||
receiver = client.baseUrl("http://localhost:" + serverPort + "/dubbo/hello")
|
receiver = client.baseUrl("http://localhost:" + serverPort + "/dubbo/hello")
|
||||||
.headers(h -> h.set("method", "Hello")).get();
|
.headers(h -> h.set("method", "Hello")).get();
|
||||||
|
|
||||||
HttpClientResponse response = receiver.response().block();
|
HttpClientResponse response = receiver.response().block();
|
||||||
|
|
||||||
Assert.assertNotNull(response);
|
Assert.assertNotNull(response);
|
||||||
// Assert.assertEquals(response.status().code(), 404);
|
Assert.assertEquals(response.status().code(), 404);
|
||||||
|
|
||||||
int code = response.status().code();
|
|
||||||
content = receiver.responseContent().asString().blockLast();
|
content = receiver.responseContent().asString().blockLast();
|
||||||
Assert.assertNull(content);
|
Assert.assertNotNull(content);
|
||||||
|
Assert.assertEquals(content, "Not Found");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
package cn.ecpark.service.usergw;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||||
|
import org.springframework.boot.web.server.LocalServerPort;
|
||||||
|
import org.springframework.test.context.TestPropertySource;
|
||||||
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
|
||||||
|
import reactor.netty.http.client.HttpClient;
|
||||||
|
import reactor.netty.http.client.HttpClient.ResponseReceiver;
|
||||||
|
import reactor.netty.http.client.HttpClientResponse;
|
||||||
|
|
||||||
|
// TODO: 添加附加Dubbo Service for Test启动进程
|
||||||
|
@SpringBootTest(classes = App.class, webEnvironment = WebEnvironment.RANDOM_PORT)
|
||||||
|
@RunWith(SpringRunner.class)
|
||||||
|
@TestPropertySource(locations = { "application3.properties" })
|
||||||
|
public class TestHttp2DubboConfig3 {
|
||||||
|
|
||||||
|
@LocalServerPort
|
||||||
|
private int serverPort;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void Test2RequestHttp2DubboSetHeader() {
|
||||||
|
|
||||||
|
// Test Base Url
|
||||||
|
HttpClient client = HttpClient.create();
|
||||||
|
ResponseReceiver<?> receiver;
|
||||||
|
String content;
|
||||||
|
|
||||||
|
receiver = client.baseUrl("http://localhost:" + serverPort + "/dubbo/hello")
|
||||||
|
.headers(h -> h.set("method", "Hello")).get();
|
||||||
|
|
||||||
|
HttpClientResponse response = receiver.response().block();
|
||||||
|
Assert.assertNotNull(response);
|
||||||
|
Assert.assertEquals(response.status().code(), 200);
|
||||||
|
content = receiver.responseContent().asString().blockLast();
|
||||||
|
Assert.assertNotNull(content);
|
||||||
|
Assert.assertEquals(content, "Hello Dubbo");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void Test3RestfulFilters() {
|
||||||
|
|
||||||
|
// Test Base Url
|
||||||
|
HttpClient client = HttpClient.create();
|
||||||
|
ResponseReceiver<?> receiver;
|
||||||
|
String content;
|
||||||
|
|
||||||
|
receiver = client.baseUrl("http://localhost:" + serverPort + "/http/xixi").get();
|
||||||
|
|
||||||
|
HttpClientResponse response = receiver.response().block();
|
||||||
|
Assert.assertNotNull(response);
|
||||||
|
Assert.assertEquals(response.status().code(), 302);
|
||||||
|
content = receiver.responseContent().asString().blockLast();
|
||||||
|
Assert.assertNotNull(content);
|
||||||
|
Assert.assertEquals(content, "Hello Dubbo");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
|
||||||
|
spring.application.name=gateway
|
||||||
|
dubbo.scan.base-packages=cn.ecpark.service.usergw.impl
|
||||||
|
dubbo.protocol.name=dubbo
|
||||||
|
dubbo.protocol.port=20999
|
||||||
|
dubbo.registry.address=zookeeper://127.0.0.1:2181
|
||||||
|
dubbo.config-center.address=zookeeper://127.0.0.1:2181
|
||||||
|
dubbo.metadata-report.address=zookeeper://127.0.0.1:2181
|
||||||
|
server.port=8888
|
||||||
|
|
||||||
|
# logging.level.org.springframework.cloud.gateway=debug
|
||||||
|
logging.file=logs/log
|
||||||
|
|
||||||
|
yame.config=test-gateway3.yaml
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package cn.ecpark.service.usergw.config;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class ParseConfig {
|
||||||
|
@Test
|
||||||
|
public void My() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,12 +1,17 @@
|
||||||
package cn.ecpark.service.usergw.utils;
|
package cn.ecpark.service.usergw.utils;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import org.apache.dubbo.config.ReferenceConfig;
|
||||||
|
import org.apache.dubbo.rpc.service.GenericService;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.springframework.boot.test.context.TestComponent;
|
import org.springframework.boot.test.context.TestComponent;
|
||||||
|
|
||||||
import cn.ecpark.service.usergw.utils.Extract.GenericServiceBase;
|
import cn.ecpark.service.usergw.utils.Extract.GenericServiceBase;
|
||||||
|
|
||||||
@TestComponent
|
|
||||||
public class TestExtract {
|
public class TestExtract {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -27,7 +32,21 @@ public class TestExtract {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void TestUriQueryList() {
|
public void TestFirst2Case() {
|
||||||
|
String content = Convert.firstUpperCase("str");
|
||||||
|
Assert.assertEquals(content, "Str");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void TestReferenceConfigKey() {
|
||||||
|
ReferenceConfig<GenericService> ref = new ReferenceConfig<GenericService>();
|
||||||
|
try {
|
||||||
|
Extract.getReferenceConfigKey(ref);
|
||||||
|
Assert.assertTrue(false);
|
||||||
|
} catch (Exception e) {
|
||||||
|
String m = e.getMessage();
|
||||||
|
assertTrue(m.startsWith("No interface info in ReferenceConfig"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user