90%单元测试覆盖率, 基本可以使用.

This commit is contained in:
huangsimin 2019-07-17 17:59:58 +08:00
parent 6037e1a58a
commit 0c042beb3f
8 changed files with 105 additions and 71 deletions

View File

@ -21,7 +21,7 @@
<java.version>1.8</java.version> <java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version> <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
<dubbo.version>2.7.2</dubbo.version> <dubbo.version>2.7.2</dubbo.version>
</properties> </properties>

View File

@ -8,7 +8,6 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -17,48 +16,48 @@ import reactor.core.publisher.Mono;
@Slf4j @Slf4j
@SpringBootConfiguration @SpringBootConfiguration
@Order(-200) @Order(-200)
public class VerifyFilter { public class VerifyFilter implements GlobalFilter {
// @Override @Override
// public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// if (true) if (true)
// return chain.filter(exchange); return chain.filter(exchange);
// // TODO: 添加权限 // TODO: 添加权限
// ServerHttpRequest request = exchange.getRequest(); ServerHttpRequest request = exchange.getRequest();
// HttpHeaders header = request.getHeaders(); HttpHeaders header = request.getHeaders();
// ServerHttpResponse response = exchange.getResponse(); ServerHttpResponse response = exchange.getResponse();
// HttpHeaders respHeader = response.getHeaders(); HttpHeaders respHeader = response.getHeaders();
// respHeader.add("token-expire", String.valueOf(System.currentTimeMillis() / 1000)); respHeader.add("token-expire", String.valueOf(System.currentTimeMillis() / 1000));
// respHeader.add("version", "v0.0.1"); respHeader.add("version", "v0.0.1");
// String token = header.getFirst("token"); String token = header.getFirst("token");
// if (token != null) { if (token != null) {
// // //
// if (VerifyToken(token)) { if (VerifyToken(token)) {
// log.info("request token is Verify Successed: {}", token); log.info("request token is Verify Successed: {}", token);
// return chain.filter(exchange); return chain.filter(exchange);
// } }
// log.info("request token is Verify Fail: {} != {}", token, TEST_TOKEN); log.info("request token is Verify Fail: {} != {}", token, TEST_TOKEN);
// } else { } else {
// log.warn("request token is empty: {}", request.getURI()); log.warn("request token is empty: {}", request.getURI());
// } }
// if (!response.setStatusCode(HttpStatus.UNAUTHORIZED)) { if (!response.setStatusCode(HttpStatus.UNAUTHORIZED)) {
// log.error("if the status code has not been set because the HTTP response is already committed"); log.error("if the status code has not been set because the HTTP response is already committed");
// } }
// return response.setComplete(); return response.setComplete();
// } }
// public static final String TEST_TOKEN = "yame"; public static final String TEST_TOKEN = "yame";
// public boolean VerifyToken(String token) { public boolean VerifyToken(String token) {
// if (token.equals(TEST_TOKEN)) { if (token.equals(TEST_TOKEN)) {
// return true; return true;
// } }
// return false; return false;
// } }
} }

View File

@ -1,9 +1,6 @@
package cn.ecpark.service.usergw.biz.filters.factory; package cn.ecpark.service.usergw.biz.filters.factory;
import java.lang.annotation.Retention;
import java.lang.reflect.Field;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
@ -12,28 +9,19 @@ import java.util.List;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import org.apache.dubbo.rpc.service.GenericService; import org.apache.dubbo.rpc.service.GenericService;
import org.reactivestreams.Publisher;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.NettyWriteResponseFilter;
import org.springframework.cloud.gateway.filter.OrderedGatewayFilter; import org.springframework.cloud.gateway.filter.OrderedGatewayFilter;
import org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.cloud.gateway.filter.factory.SetStatusGatewayFilterFactory;
import org.springframework.cloud.gateway.handler.FilteringWebHandler;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.http.server.reactive.ServerHttpResponseDecorator;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.setResponseStatus;
import cn.ecpark.service.usergw.biz.filters.bean.GenericServicePool; import cn.ecpark.service.usergw.biz.filters.bean.GenericServicePool;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@ -7,22 +7,22 @@ restful:
uri: http://httpbin.org:80/* uri: http://httpbin.org:80/*
order: 9 order: 9
predicates: predicates:
- Path=/get - Path=/get
- Header=XX, \d+ - Header=XX, \d+
- id: path_route12; - id: path_route12;
uri: http://httpbin.org:80/* uri: http://httpbin.org:80/*
order: 9 order: 9
predicates: predicates:
- Path=/get - Path=/get
- Header=XX, \d+ - Header=XX, \d+
- id: path_route13 - id: path_route13
uri: http://httpbin.org:80/* uri: http://httpbin.org:80/*
order: 9 order: 9
predicates: predicates:
- Path=/get - Path=/get
- Header=XX, \d+ - Header=XX, \d+
# - id: redirect_to # - id: redirect_to
# uri: http://localhost/test/** # uri: http://localhost/test/**
# order: 11 # order: 11

View File

@ -1,15 +1,26 @@
default-filters:
- AddResponseHeader=X-Response-Default-Foo, Test-Default-Bar
restful: # filters 必须 有predicates uri只是预期到达的地址 restful: # filters 必须 有predicates uri只是预期到达的地址
routes: routes:
- id: redirect_to - id: haha
uri: http://localhost:4444
order: 0
predicates:
- Path=/http/hello
- id: rewrite
uri: http://localhost:4444
order: 0
predicates:
- Path=/http/rewrite
filters:
- RewritePath=/http/rewrite, /http/hello
- id: xixi
uri: http://localhost:8888/http/xixi uri: http://localhost:8888/http/xixi
order: 11 order: 11
predicates: predicates:
- Path=http://localhost:8888/http/xixi - Path=/http/xixi
filters: filters:
- RedirectTo=302, http://localhost:8888/http/hello - RedirectTo=302, http://localhost:4444/http/hello
dubbo: dubbo:
routes: routes:
@ -28,6 +39,6 @@ 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/hello

View File

@ -1,5 +1,9 @@
package cn.ecpark.service.usergw; package cn.ecpark.service.usergw;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@ -14,7 +18,7 @@ import reactor.netty.http.client.HttpClient.ResponseReceiver;
import reactor.netty.http.client.HttpClientResponse; import reactor.netty.http.client.HttpClientResponse;
// TODO: 添加附加Dubbo Service for Test启动进程 // TODO: 添加附加Dubbo Service for Test启动进程
@SpringBootTest(classes = App.class, webEnvironment = WebEnvironment.RANDOM_PORT) @SpringBootTest(classes = App.class, webEnvironment = WebEnvironment.DEFINED_PORT)
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@TestPropertySource(locations = { "application3.properties" }) @TestPropertySource(locations = { "application3.properties" })
public class TestHttp2DubboConfig3 { public class TestHttp2DubboConfig3 {
@ -43,6 +47,7 @@ public class TestHttp2DubboConfig3 {
@Test @Test
@SuppressWarnings("unchecked")
public void Test3RestfulFilters() { public void Test3RestfulFilters() {
// Test Base Url // Test Base Url
@ -50,14 +55,47 @@ public class TestHttp2DubboConfig3 {
ResponseReceiver<?> receiver; ResponseReceiver<?> receiver;
String content; String content;
// Test 302
receiver = client.baseUrl("http://localhost:" + serverPort + "/http/xixi").get(); receiver = client.baseUrl("http://localhost:" + serverPort + "/http/xixi").get();
HttpClientResponse response = receiver.response().block(); HttpClientResponse response = receiver.response().block();
Assert.assertNotNull(response); Assert.assertNotNull(response);
Assert.assertEquals(response.status().code(), 302); Assert.assertEquals(response.status().code(), 302);
content = receiver.responseContent().asString().blockLast(); content = receiver.responseContent().asString().blockLast();
Assert.assertNull(content);
// Test RedirectTo
receiver = client.baseUrl("http://localhost:" + serverPort + "/http/xixi").followRedirect(true).get();
response = receiver.response().block();
Assert.assertEquals(response.status().code(), 200);
content = receiver.responseContent().asString().blockLast();
Assert.assertEquals(content, "Http Hello");
// 测试没配置的路由
receiver = client.baseUrl("http://localhost:" + serverPort + "/xixi").followRedirect(true).get();
response = receiver.response().block();
Assert.assertEquals(response.status().code(), 404);
content = receiver.responseContent().asString().blockLast();
Assert.assertNotNull(content); Assert.assertNotNull(content);
Assert.assertEquals(content, "Hello Dubbo");
Object rjson = JSON.parse(content);
Map<String, Object> rmap = (Map<String, Object>)rjson;
Assert.assertEquals(rmap.get("error").toString(), "Not Found");
// 测试普通路由
receiver = client.baseUrl("http://localhost:" + serverPort + "/http/hello").get();
response = receiver.response().block();
Assert.assertEquals(response.status().code(), 200);
content = receiver.responseContent().asString().blockLast();
Assert.assertNotNull(content);
// 测试普通路由
receiver = client.baseUrl("http://localhost:" + serverPort + "/http/rewrite").get();
response = receiver.response().block();
Assert.assertEquals(response.status().code(), 200);
content = receiver.responseContent().asString().blockLast();
Assert.assertEquals(content, "Http Hello");
} }

View File

@ -1,13 +1,11 @@
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 static org.junit.Assert.assertTrue;
import org.apache.dubbo.config.ReferenceConfig; import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.rpc.service.GenericService; 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 cn.ecpark.service.usergw.utils.Extract.GenericServiceBase; import cn.ecpark.service.usergw.utils.Extract.GenericServiceBase;