parent
f598f84449
commit
57325417d1
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.cloud.plugin.gateway.context;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link PathRewrite}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class PathRewriteTest {
|
||||
|
||||
@Test
|
||||
public void basicProperties() {
|
||||
PathRewrite one = new PathRewrite();
|
||||
one.setPathRewriteId("id");
|
||||
one.setGatewayGroupId("gatewayGroupId");
|
||||
one.setRegex("regex");
|
||||
one.setReplacement("replacement");
|
||||
one.setBlocked("Y");
|
||||
one.setOrder(1);
|
||||
one.setPathRewriteIds(Collections.emptyList());
|
||||
|
||||
assertThat(one.getPathRewriteId()).isEqualTo("id");
|
||||
assertThat(one.getGatewayGroupId()).isEqualTo("gatewayGroupId");
|
||||
assertThat(one.getRegex()).isEqualTo("regex");
|
||||
assertThat(one.getReplacement()).isEqualTo("replacement");
|
||||
assertThat(one.getBlocked()).isEqualTo("Y");
|
||||
assertThat(one.getOrder()).isEqualTo(1);
|
||||
assertThat(one.getPathRewriteIds()).hasSize(0);
|
||||
assertThat(one.toString()).isNotEmpty();
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link TsfGatewayRequest}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class TsfGatewayRequestTest {
|
||||
|
||||
@Test
|
||||
public void testTsfGatewayRequest() {
|
||||
TsfGatewayRequest tsfGatewayRequest = new TsfGatewayRequest();
|
||||
tsfGatewayRequest.setUri(URI.create("http://localhost:8080/test"));
|
||||
tsfGatewayRequest.setMethod("GET");
|
||||
tsfGatewayRequest.setHeaders(new HashMap<>());
|
||||
tsfGatewayRequest.setRequestHeaders(new HashMap<>());
|
||||
tsfGatewayRequest.putRequestHeader("request", "test");
|
||||
tsfGatewayRequest.setParameterMap(new HashMap<>());
|
||||
tsfGatewayRequest.setCookieMap(new HashMap<>());
|
||||
tsfGatewayRequest.putCookie("cookie", "test");
|
||||
|
||||
assertThat(tsfGatewayRequest.getUri().toString()).isEqualTo("http://localhost:8080/test");
|
||||
assertThat(tsfGatewayRequest.getMethod()).isEqualTo("GET");
|
||||
assertThat(tsfGatewayRequest.getHeaders()).isNotNull();
|
||||
assertThat(tsfGatewayRequest.getHeader("test")).isNull();
|
||||
assertThat(tsfGatewayRequest.getRequestHeaders()).isNotNull();
|
||||
assertThat(tsfGatewayRequest.getRequestHeader("request")).isEqualTo("test");
|
||||
assertThat(tsfGatewayRequest.getParameterMap()).isNotNull();
|
||||
assertThat(tsfGatewayRequest.getCookieMap()).isNotNull();
|
||||
assertThat(tsfGatewayRequest.getCookie("cookie")).isEqualTo("test");
|
||||
assertThat(tsfGatewayRequest.toString()).isNotBlank();
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.constant;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link AuthMode}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class AuthModeTest {
|
||||
|
||||
@Test
|
||||
public void testGetMode() {
|
||||
assertThat(AuthMode.getMode("none")).isEqualTo(AuthMode.NONE);
|
||||
assertThat(AuthMode.getMode("secret")).isEqualTo(AuthMode.SECRET);
|
||||
assertThat(AuthMode.getMode("test")).isNull();
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.constant;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link CommonStatus}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class CommonStatusTest {
|
||||
|
||||
@Test
|
||||
public void testGetStatus() {
|
||||
assertThat(CommonStatus.getStatus("enabled")).isEqualTo(CommonStatus.ENABLED);
|
||||
assertThat(CommonStatus.getStatus("disabled")).isEqualTo(CommonStatus.DISABLED);
|
||||
assertThat(CommonStatus.getStatus("test")).isNull();
|
||||
|
||||
assertThat(CommonStatus.getStatus("enabled", "")).isEqualTo(CommonStatus.ENABLED);
|
||||
assertThat(CommonStatus.getStatus("disabled", "")).isEqualTo(CommonStatus.DISABLED);
|
||||
assertThat(CommonStatus.getStatus("test", "")).isNull();
|
||||
|
||||
assertThat(CommonStatus.ENABLED.getStatus()).isEqualTo("enabled");
|
||||
assertThat(CommonStatus.DISABLED.getStatus()).isEqualTo("disabled");
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.constant;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
|
||||
/**
|
||||
* Test for {@link GatewayConstant}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class GatewayConstantTest {
|
||||
|
||||
@Test
|
||||
public void testGatewayConstant() {
|
||||
assertThatNoException().isThrownBy(() -> {
|
||||
System.out.println(GatewayConstant.GATEWAY_REPO_PREFIX);
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.constant;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link HttpMethod}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class HttpMethodTest {
|
||||
|
||||
@Test
|
||||
public void testHttpMethod() {
|
||||
assertThat(HttpMethod.getHttpMethod("POST")).isEqualTo(HttpMethod.POST);
|
||||
assertThat(HttpMethod.getHttpMethod("GET")).isEqualTo(HttpMethod.GET);
|
||||
assertThat(HttpMethod.getHttpMethod("PUT")).isEqualTo(HttpMethod.PUT);
|
||||
assertThat(HttpMethod.getHttpMethod("DELETE")).isEqualTo(HttpMethod.DELETE);
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.constant;
|
||||
|
||||
import com.tencent.tsf.gateway.core.exception.TsfGatewayException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
/**
|
||||
* Test for {@link PluginConstants}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class PluginConstantsTest {
|
||||
|
||||
@Test
|
||||
public void testTraceIdEnabledType() {
|
||||
assertThat(PluginConstants.TraceIdEnabledType.getTraceIdEnabledType("Y")).isEqualTo(PluginConstants.TraceIdEnabledType.Y);
|
||||
assertThat(PluginConstants.TraceIdEnabledType.getTraceIdEnabledType("N")).isEqualTo(PluginConstants.TraceIdEnabledType.N);
|
||||
assertThat(PluginConstants.TraceIdEnabledType.getTraceIdEnabledType("test")).isNull();
|
||||
|
||||
assertThatNoException().isThrownBy(() -> {
|
||||
PluginConstants.TraceIdEnabledType.checkValidity("Y");
|
||||
});
|
||||
assertThatNoException().isThrownBy(() -> {
|
||||
PluginConstants.TraceIdEnabledType.checkValidity("N");
|
||||
});
|
||||
assertThatThrownBy(() -> {
|
||||
PluginConstants.TraceIdEnabledType.checkValidity("test");
|
||||
}).isExactlyInstanceOf(TsfGatewayException.class).hasMessageContaining("Tag插件TraceIdEnabled类型");
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.constant;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link PluginScopeType}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class PluginScopeTypeTest {
|
||||
|
||||
@Test
|
||||
public void testPluginScopeType() {
|
||||
assertThat(PluginScopeType.getScopeType("group")).isEqualTo(PluginScopeType.GROUP);
|
||||
assertThat(PluginScopeType.getScopeType("api")).isEqualTo(PluginScopeType.API);
|
||||
assertThat(PluginScopeType.getScopeType("test")).isNull();
|
||||
|
||||
assertThat(PluginScopeType.GROUP.getScopeType()).isEqualTo("group");
|
||||
assertThat(PluginScopeType.API.getScopeType()).isEqualTo("api");
|
||||
}
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.constant;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.tencent.tsf.gateway.core.model.JwtPlugin;
|
||||
import com.tencent.tsf.gateway.core.model.OAuthPlugin;
|
||||
import com.tencent.tsf.gateway.core.model.RequestTransformerPlugin;
|
||||
import com.tencent.tsf.gateway.core.model.TagPlugin;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link PluginType}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class PluginTypeTest {
|
||||
|
||||
@Test
|
||||
public void testPluginType() {
|
||||
assertThat(PluginType.getPluginType("ReqTransformer")).isEqualTo(PluginType.REQ_TRANSFORMER);
|
||||
assertThat(PluginType.getPluginType("OAuth")).isEqualTo(PluginType.OAUTH);
|
||||
assertThat(PluginType.getPluginType("Jwt")).isEqualTo(PluginType.JWT);
|
||||
assertThat(PluginType.getPluginType("Tag")).isEqualTo(PluginType.TAG);
|
||||
assertThat(PluginType.getPluginType("Unknown")).isNull();
|
||||
assertThat(PluginType.getPluginType("")).isNull();
|
||||
|
||||
Map<String, String> map = PluginType.toMap();
|
||||
assertThat(map.get("OAUTH")).isEqualTo("OAuth");
|
||||
assertThat(map.get("JWT")).isEqualTo("Jwt");
|
||||
assertThat(map.get("TAG")).isEqualTo("Tag");
|
||||
|
||||
assertThat(PluginType.OAUTH.getPluginClazz()).isEqualTo(OAuthPlugin.class);
|
||||
assertThat(PluginType.JWT.getPluginClazz()).isEqualTo(JwtPlugin.class);
|
||||
assertThat(PluginType.TAG.getPluginClazz()).isEqualTo(TagPlugin.class);
|
||||
|
||||
PluginType.JWT.setType("newType");
|
||||
assertThat(PluginType.JWT.getType()).isEqualTo("newType");
|
||||
PluginType.JWT.setPluginClazz(RequestTransformerPlugin.class);
|
||||
assertThat(PluginType.JWT.getPluginClazz()).isEqualTo(RequestTransformerPlugin.class);
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.constant;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link TsfAlgType}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class TsfAlgTypeTest {
|
||||
|
||||
@Test
|
||||
public void testTsfAlgType() {
|
||||
assertThat(TsfAlgType.getSecurityCode("0")).isEqualTo(TsfAlgType.HMAC_MD5);
|
||||
assertThat(TsfAlgType.getSecurityCode("1")).isEqualTo(TsfAlgType.HMAC_SHA_1);
|
||||
assertThat(TsfAlgType.getSecurityCode("2")).isEqualTo(TsfAlgType.HMAC_SHA_256);
|
||||
assertThat(TsfAlgType.getSecurityCode("3")).isEqualTo(TsfAlgType.HMAC_SHA_512);
|
||||
assertThat(TsfAlgType.getSecurityCode("4")).isEqualTo(TsfAlgType.HMAC_SM3);
|
||||
assertThat(TsfAlgType.getSecurityCode("test")).isNull();
|
||||
|
||||
assertThat(TsfAlgType.HMAC_MD5.getAlg()).isEqualTo("0");
|
||||
assertThat(TsfAlgType.HMAC_SHA_1.getAlg()).isEqualTo("1");
|
||||
assertThat(TsfAlgType.HMAC_SHA_256.getAlg()).isEqualTo("2");
|
||||
assertThat(TsfAlgType.HMAC_SHA_512.getAlg()).isEqualTo("3");
|
||||
assertThat(TsfAlgType.HMAC_SM3.getAlg()).isEqualTo("4");
|
||||
|
||||
TsfAlgType.HMAC_MD5.setAlg("00");
|
||||
assertThat(TsfAlgType.HMAC_MD5.getAlg()).isEqualTo("00");
|
||||
}
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link ClaimMapping}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class ClaimMappingTest {
|
||||
|
||||
@Test
|
||||
public void testClaimMapping() {
|
||||
ClaimMapping claimMapping = new ClaimMapping();
|
||||
claimMapping.setParameterName("parameterName");
|
||||
claimMapping.setMappingParameterName("mappingParameterName");
|
||||
claimMapping.setLocation("location");
|
||||
|
||||
assertThat(claimMapping.getParameterName()).isEqualTo("parameterName");
|
||||
assertThat(claimMapping.getMappingParameterName()).isEqualTo("mappingParameterName");
|
||||
assertThat(claimMapping.getLocation()).isEqualTo("location");
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link GatewayAllResult}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class GatewayAllResultTest {
|
||||
|
||||
@Test
|
||||
public void testGatewayAllResult() {
|
||||
GatewayAllResult gatewayAllResult = new GatewayAllResult(null, null, null, null);
|
||||
gatewayAllResult.setGroupResult(new GroupResult());
|
||||
gatewayAllResult.setGroupApiResult(new GroupApiResult());
|
||||
gatewayAllResult.setPathRewriteResult(new PathRewriteResult());
|
||||
gatewayAllResult.setPathWildcardResult(new PathWildcardResult());
|
||||
|
||||
assertThat(gatewayAllResult.getGroupResult()).isNotNull();
|
||||
assertThat(gatewayAllResult.getGroupApiResult()).isNotNull();
|
||||
assertThat(gatewayAllResult.getPathRewriteResult()).isNotNull();
|
||||
assertThat(gatewayAllResult.getPathWildcardResult()).isNotNull();
|
||||
}
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link GroupApiResult}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class GroupApiResultTest {
|
||||
|
||||
@Test
|
||||
public void testGroupApiResult() {
|
||||
GroupApiResult groupApiResult = new GroupApiResult();
|
||||
groupApiResult.setGatewayId("gatewayId");
|
||||
groupApiResult.setGatewayName("gatewayName");
|
||||
groupApiResult.setGatewayGroupId("gatewayGroupId");
|
||||
groupApiResult.setReversion(1);
|
||||
groupApiResult.setUpdatedTime("updatedTime");
|
||||
groupApiResult.setResult(new ArrayList<>());
|
||||
groupApiResult.getResult().add(new GroupApi());
|
||||
|
||||
assertThat(groupApiResult.getGatewayId()).isEqualTo("gatewayId");
|
||||
assertThat(groupApiResult.getGatewayName()).isEqualTo("gatewayName");
|
||||
assertThat(groupApiResult.getGatewayGroupId()).isEqualTo("gatewayGroupId");
|
||||
assertThat(groupApiResult.getReversion()).isEqualTo(1);
|
||||
assertThat(groupApiResult.getUpdatedTime()).isEqualTo("updatedTime");
|
||||
assertThat(groupApiResult.getResult()).isNotEmpty();
|
||||
assertThat(groupApiResult.getResult()).hasSize(1);
|
||||
}
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link GroupApi}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class GroupApiTest {
|
||||
|
||||
@Test
|
||||
public void testGroupApi() {
|
||||
GroupApi groupApi = new GroupApi();
|
||||
groupApi.setApiId("apiId");
|
||||
groupApi.setGroupId("groupId");
|
||||
groupApi.setPath("path");
|
||||
groupApi.setMethod("method");
|
||||
groupApi.setServiceName("serviceName");
|
||||
groupApi.setNamespaceId("namespaceId");
|
||||
groupApi.setNamespaceName("namespaceName");
|
||||
groupApi.setReleaseStatus("releaseStatus");
|
||||
groupApi.setUsableStatus("usableStatus");
|
||||
groupApi.setPathMapping("pathMapping");
|
||||
groupApi.setTimeout(100);
|
||||
groupApi.setHost("host");
|
||||
groupApi.setDescription("description");
|
||||
groupApi.setApiType("apiType");
|
||||
groupApi.setRpcType("rpcType");
|
||||
groupApi.setRpcExt("rpcExt");
|
||||
Object rpcExtObj = new Object();
|
||||
groupApi.setRpcExtObj(rpcExtObj);
|
||||
|
||||
assertThat(groupApi.getApiId()).isEqualTo("apiId");
|
||||
assertThat(groupApi.getGroupId()).isEqualTo("groupId");
|
||||
assertThat(groupApi.getPath()).isEqualTo("path");
|
||||
assertThat(groupApi.getMethod()).isEqualTo("method");
|
||||
assertThat(groupApi.getServiceName()).isEqualTo("serviceName");
|
||||
assertThat(groupApi.getNamespaceId()).isEqualTo("namespaceId");
|
||||
assertThat(groupApi.getNamespaceName()).isEqualTo("namespaceName");
|
||||
assertThat(groupApi.getReleaseStatus()).isEqualTo("releaseStatus");
|
||||
assertThat(groupApi.getUsableStatus()).isEqualTo("usableStatus");
|
||||
assertThat(groupApi.getPathMapping()).isEqualTo("pathMapping");
|
||||
assertThat(groupApi.getTimeout()).isEqualTo(100);
|
||||
assertThat(groupApi.getHost()).isEqualTo("host");
|
||||
assertThat(groupApi.getDescription()).isEqualTo("description");
|
||||
assertThat(groupApi.getApiType()).isEqualTo("apiType");
|
||||
assertThat(groupApi.getRpcType()).isEqualTo("rpcType");
|
||||
assertThat(groupApi.getRpcExt()).isEqualTo("rpcExt");
|
||||
assertThat(groupApi.getRpcExtObj()).isEqualTo(rpcExtObj);
|
||||
}
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link GroupResult}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class GroupResultTest {
|
||||
|
||||
@Test
|
||||
public void testGroupResult() {
|
||||
GroupResult groupResult = new GroupResult();
|
||||
groupResult.setGatewayId("gatewayId");
|
||||
groupResult.setGatewayName("gatewayName");
|
||||
groupResult.setGatewayGroupId("gatewayGroupId");
|
||||
groupResult.setReversion(1);
|
||||
groupResult.setUpdatedTime("updatedTime");
|
||||
groupResult.setResult(new ArrayList<>());
|
||||
groupResult.getResult().add(new Group());
|
||||
|
||||
assertThat(groupResult.getGatewayId()).isEqualTo("gatewayId");
|
||||
assertThat(groupResult.getGatewayName()).isEqualTo("gatewayName");
|
||||
assertThat(groupResult.getGatewayGroupId()).isEqualTo("gatewayGroupId");
|
||||
assertThat(groupResult.getReversion()).isEqualTo(1);
|
||||
assertThat(groupResult.getUpdatedTime()).isEqualTo("updatedTime");
|
||||
assertThat(groupResult.getResult()).isNotEmpty();
|
||||
assertThat(groupResult.getResult()).hasSize(1);
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link GroupSecret}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class GroupSecretTest {
|
||||
|
||||
@Test
|
||||
public void testGroupSecret() {
|
||||
GroupSecret groupSecret = new GroupSecret();
|
||||
groupSecret.setSecretId("secretId");
|
||||
groupSecret.setSecretKey("secretKey");
|
||||
groupSecret.setSecretName("secretName");
|
||||
groupSecret.setGroupId("groupId");
|
||||
groupSecret.setStatus("status");
|
||||
groupSecret.setExpiredTime("expiredTime");
|
||||
|
||||
assertThat(groupSecret.getSecretId()).isEqualTo("secretId");
|
||||
assertThat(groupSecret.getSecretKey()).isEqualTo("secretKey");
|
||||
assertThat(groupSecret.getSecretName()).isEqualTo("secretName");
|
||||
assertThat(groupSecret.getGroupId()).isEqualTo("groupId");
|
||||
assertThat(groupSecret.getStatus()).isEqualTo("status");
|
||||
assertThat(groupSecret.getExpiredTime()).isEqualTo("expiredTime");
|
||||
assertThat(groupSecret.toString()).isEqualTo("GroupSecret{secretId='secretId', secretKey='secretKey', secretName='secretName', groupId='groupId', status='status', expiredTime='expiredTime'}");
|
||||
}
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link Group}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class GroupTest {
|
||||
|
||||
@Test
|
||||
public void testGroup() {
|
||||
Group group = new Group();
|
||||
group.setGroupId("groupId");
|
||||
group.setGroupName("groupName");
|
||||
group.setGroupContext("groupContext");
|
||||
group.setReleaseStatus("releaseStatus");
|
||||
group.setAuthMode("authMode");
|
||||
group.setGroupType("groupType");
|
||||
group.setSecretList(generateGroupSecretList());
|
||||
group.setNamespaceNameKey("namespaceNameKey");
|
||||
group.setServiceNameKey("serviceNameKey");
|
||||
group.setNamespaceNameKeyPosition("Header");
|
||||
group.setServiceNameKeyPosition("Query");
|
||||
|
||||
assertThat(group.getGroupId()).isEqualTo("groupId");
|
||||
assertThat(group.getGroupName()).isEqualTo("groupName");
|
||||
assertThat(group.getGroupContext()).isEqualTo("groupContext");
|
||||
assertThat(group.getReleaseStatus()).isEqualTo("releaseStatus");
|
||||
assertThat(group.getAuthMode()).isEqualTo("authMode");
|
||||
assertThat(group.getGroupType()).isEqualTo("groupType");
|
||||
assertThat(group.getSecretList()).isNotNull();
|
||||
assertThat(group.getSecretList()).hasSize(1);
|
||||
assertThat(group.getNamespaceNameKey()).isEqualTo("namespaceNameKey");
|
||||
assertThat(group.getServiceNameKey()).isEqualTo("serviceNameKey");
|
||||
assertThat(group.getNamespaceNameKeyPosition()).isEqualTo("Header");
|
||||
assertThat(group.getServiceNameKeyPosition()).isEqualTo("Query");
|
||||
assertThat(group.toString()).isEqualTo("Group{groupId='groupId', groupName='groupName', groupContext='groupContext', releaseStatus='releaseStatus', authMode='authMode', groupType='groupType', secretList=[GroupSecret{secretId='secretId', secretKey='secretKey', secretName='secretName', groupId='groupId', status='status', expiredTime='expiredTime'}], namespaceNameKey='namespaceNameKey', serviceNameKey='serviceNameKey', namespaceNameKeyPosition='Header', serviceNameKeyPosition='Query'}");
|
||||
}
|
||||
|
||||
private List<GroupSecret> generateGroupSecretList() {
|
||||
GroupSecret groupSecret = new GroupSecret();
|
||||
groupSecret.setSecretId("secretId");
|
||||
groupSecret.setSecretKey("secretKey");
|
||||
groupSecret.setSecretName("secretName");
|
||||
groupSecret.setGroupId("groupId");
|
||||
groupSecret.setStatus("status");
|
||||
groupSecret.setExpiredTime("expiredTime");
|
||||
List<GroupSecret> groupSecretList = new ArrayList<>();
|
||||
groupSecretList.add(groupSecret);
|
||||
return groupSecretList;
|
||||
}
|
||||
}
|
@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import com.tencent.tsf.gateway.core.exception.TsfGatewayException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
/**
|
||||
* Test for {@link JwtPlugin}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class JwtPluginTest {
|
||||
|
||||
@Test
|
||||
public void testJwtPlugin() {
|
||||
JwtPlugin jwtPlugin = new JwtPlugin();
|
||||
|
||||
assertThatThrownBy(jwtPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("插件名称参数错误");
|
||||
jwtPlugin.setName("jwt");
|
||||
|
||||
assertThatThrownBy(jwtPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("插件类型参数错误");
|
||||
jwtPlugin.setType("Jwt");
|
||||
|
||||
assertThatThrownBy(jwtPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("publicKeyJson");
|
||||
jwtPlugin.setPublicKeyJson("publicKeyJson");
|
||||
|
||||
assertThatThrownBy(jwtPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("tokenBaggagePosition");
|
||||
jwtPlugin.setTokenBaggagePosition("tokenBaggagePosition");
|
||||
assertThatThrownBy(jwtPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("tokenBaggagePosition");
|
||||
jwtPlugin.setTokenBaggagePosition("query");
|
||||
|
||||
assertThatThrownBy(jwtPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("tokenKeyName");
|
||||
jwtPlugin.setTokenKeyName("tokenKeyName");
|
||||
|
||||
assertThatThrownBy(jwtPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("kid");
|
||||
jwtPlugin.setKid("kid");
|
||||
|
||||
assertThatNoException().isThrownBy(jwtPlugin::check);
|
||||
jwtPlugin.setRedirectUrl("redirectUrl");
|
||||
jwtPlugin.setClaimMappingJson("claimMappingJson");
|
||||
jwtPlugin.setTokenBaggagePosition("header");
|
||||
assertThatNoException().isThrownBy(jwtPlugin::check);
|
||||
|
||||
assertThat(jwtPlugin.getKid()).isEqualTo("kid");
|
||||
assertThat(jwtPlugin.getPublicKeyJson()).isEqualTo("publicKeyJson");
|
||||
assertThat(jwtPlugin.getTokenBaggagePosition()).isEqualTo("header");
|
||||
assertThat(jwtPlugin.getTokenKeyName()).isEqualTo("tokenKeyName");
|
||||
assertThat(jwtPlugin.getRedirectUrl()).isEqualTo("redirectUrl");
|
||||
assertThat(jwtPlugin.getClaimMappingJson()).isEqualTo("claimMappingJson");
|
||||
}
|
||||
}
|
@ -0,0 +1,116 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import com.tencent.tsf.gateway.core.exception.TsfGatewayException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
/**
|
||||
* Test for {@link OAuthPlugin}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class OAuthPluginTest {
|
||||
|
||||
@Test
|
||||
public void testOAuthPlugin() {
|
||||
OAuthPlugin oAuthPlugin = new OAuthPlugin();
|
||||
|
||||
assertThatThrownBy(oAuthPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("插件名称参数错误");
|
||||
oAuthPlugin.setName("oauth");
|
||||
|
||||
assertThatThrownBy(oAuthPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("插件类型参数错误");
|
||||
oAuthPlugin.setType("OAuth");
|
||||
|
||||
assertThatThrownBy(oAuthPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("tokenAuthUrl");
|
||||
oAuthPlugin.setTokenAuthUrl("tokenAuthUrl");
|
||||
|
||||
assertThatThrownBy(oAuthPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("tokenAuthMethod");
|
||||
oAuthPlugin.setTokenAuthMethod("tokenAuthMethod");
|
||||
assertThatThrownBy(oAuthPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("tokenAuthMethod");
|
||||
oAuthPlugin.setTokenAuthMethod("get");
|
||||
|
||||
assertThatThrownBy(oAuthPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("tokenBaggagePosition");
|
||||
oAuthPlugin.setTokenBaggagePosition("tokenBaggagePosition");
|
||||
assertThatThrownBy(oAuthPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("tokenBaggagePosition");
|
||||
oAuthPlugin.setTokenBaggagePosition("query");
|
||||
|
||||
assertThatThrownBy(oAuthPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("tokenKeyName");
|
||||
oAuthPlugin.setTokenKeyName("tokenKeyName");
|
||||
|
||||
oAuthPlugin.setPayloadMappingPosition("payloadMappingPosition");
|
||||
assertThatThrownBy(oAuthPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("payloadMappingPosition");
|
||||
oAuthPlugin.setPayloadMappingPosition("query");
|
||||
|
||||
assertThatThrownBy(oAuthPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("expireTime");
|
||||
oAuthPlugin.setExpireTime(100);
|
||||
assertThatThrownBy(oAuthPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("expireTime");
|
||||
oAuthPlugin.setExpireTime(-100);
|
||||
assertThatThrownBy(oAuthPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("expireTime");
|
||||
oAuthPlugin.setExpireTime(15);
|
||||
|
||||
|
||||
oAuthPlugin.setTokenAuthServiceName("tokenAuthServiceName");
|
||||
oAuthPlugin.setRedirectUrl("redirectUrl");
|
||||
oAuthPlugin.setTokenKeyName("tokenKeyName");
|
||||
oAuthPlugin.setPayloadMappingName("payloadMappingName");
|
||||
|
||||
assertThatNoException().isThrownBy(oAuthPlugin::check);
|
||||
oAuthPlugin.setTokenAuthMethod("post");
|
||||
oAuthPlugin.setPayloadMappingPosition("header");
|
||||
assertThatNoException().isThrownBy(oAuthPlugin::check);
|
||||
|
||||
assertThat(oAuthPlugin.getTokenAuthServiceName()).isEqualTo("tokenAuthServiceName");
|
||||
assertThat(oAuthPlugin.getTokenAuthUrl()).isEqualTo("tokenAuthUrl");
|
||||
assertThat(oAuthPlugin.getTokenAuthMethod()).isEqualTo("post");
|
||||
assertThat(oAuthPlugin.getExpireTime()).isEqualTo(15);
|
||||
assertThat(oAuthPlugin.getRedirectUrl()).isEqualTo("redirectUrl");
|
||||
assertThat(oAuthPlugin.getTokenBaggagePosition()).isEqualTo("query");
|
||||
assertThat(oAuthPlugin.getTokenKeyName()).isEqualTo("tokenKeyName");
|
||||
assertThat(oAuthPlugin.getPayloadMappingName()).isEqualTo("payloadMappingName");
|
||||
assertThat(oAuthPlugin.getPayloadMappingPosition()).isEqualTo("header");
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link OAuthResult}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class OAuthResultTest {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
OAuthResult oAuthResult = new OAuthResult();
|
||||
oAuthResult.setResult(true);
|
||||
oAuthResult.setPayload("payload");
|
||||
|
||||
assertThat(oAuthResult.getResult()).isTrue();
|
||||
assertThat(oAuthResult.getPayload()).isEqualTo("payload");
|
||||
}
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.tencent.cloud.plugin.gateway.context.PathRewrite;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link PathRewriteResult}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class PathRewriteResultTest {
|
||||
|
||||
@Test
|
||||
public void testPathRewriteResult() {
|
||||
PathRewriteResult pathRewriteResult = new PathRewriteResult();
|
||||
pathRewriteResult.setGatewayId("gatewayId");
|
||||
pathRewriteResult.setGatewayName("gatewayName");
|
||||
pathRewriteResult.setGatewayGroupId("gatewayGroupId");
|
||||
pathRewriteResult.setReversion(1);
|
||||
pathRewriteResult.setUpdatedTime("updatedTime");
|
||||
pathRewriteResult.setResult(new ArrayList<>());
|
||||
pathRewriteResult.getResult().add(new PathRewrite());
|
||||
|
||||
assertThat(pathRewriteResult.getGatewayId()).isEqualTo("gatewayId");
|
||||
assertThat(pathRewriteResult.getGatewayName()).isEqualTo("gatewayName");
|
||||
assertThat(pathRewriteResult.getGatewayGroupId()).isEqualTo("gatewayGroupId");
|
||||
assertThat(pathRewriteResult.getReversion()).isEqualTo(1);
|
||||
assertThat(pathRewriteResult.getUpdatedTime()).isEqualTo("updatedTime");
|
||||
assertThat(pathRewriteResult.getResult()).isNotEmpty();
|
||||
assertThat(pathRewriteResult.getResult()).hasSize(1);
|
||||
}
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link PathWildcardResult}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class PathWildcardResultTest {
|
||||
|
||||
@Test
|
||||
public void testPathWildcardResult() {
|
||||
PathWildcardResult pathWildcardResult = new PathWildcardResult();
|
||||
pathWildcardResult.setGatewayId("gatewayId");
|
||||
pathWildcardResult.setGatewayName("gatewayName");
|
||||
pathWildcardResult.setGatewayGroupId("gatewayGroupId");
|
||||
pathWildcardResult.setReversion(1);
|
||||
pathWildcardResult.setUpdatedTime("updatedTime");
|
||||
pathWildcardResult.setResult(new ArrayList<>());
|
||||
pathWildcardResult.getResult().add(new PathWildcardRule());
|
||||
|
||||
assertThat(pathWildcardResult.getGatewayId()).isEqualTo("gatewayId");
|
||||
assertThat(pathWildcardResult.getGatewayName()).isEqualTo("gatewayName");
|
||||
assertThat(pathWildcardResult.getGatewayGroupId()).isEqualTo("gatewayGroupId");
|
||||
assertThat(pathWildcardResult.getReversion()).isEqualTo(1);
|
||||
assertThat(pathWildcardResult.getUpdatedTime()).isEqualTo("updatedTime");
|
||||
assertThat(pathWildcardResult.getResult()).isNotEmpty();
|
||||
assertThat(pathWildcardResult.getResult()).hasSize(1);
|
||||
}
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link PathWildcardRule}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class PathWildcardRuleTest {
|
||||
|
||||
@Test
|
||||
public void testPathWildcardRule() {
|
||||
PathWildcardRule pathWildcardRule = new PathWildcardRule();
|
||||
pathWildcardRule.setWildCardId("wildCardId");
|
||||
pathWildcardRule.setGroupId("groupId");
|
||||
pathWildcardRule.setWildCardPath("wildCardPath");
|
||||
pathWildcardRule.setMethod("method");
|
||||
pathWildcardRule.setServiceId("serviceId");
|
||||
pathWildcardRule.setServiceName("serviceName");
|
||||
pathWildcardRule.setNamespaceId("namespaceId");
|
||||
pathWildcardRule.setNamespaceName("namespaceName");
|
||||
pathWildcardRule.setTimeout(100);
|
||||
pathWildcardRule.setWildCardIds(Collections.singletonList("wildCardId"));
|
||||
|
||||
assertThat(pathWildcardRule.getWildCardId()).isEqualTo("wildCardId");
|
||||
assertThat(pathWildcardRule.getGroupId()).isEqualTo("groupId");
|
||||
assertThat(pathWildcardRule.getWildCardPath()).isEqualTo("wildCardPath");
|
||||
assertThat(pathWildcardRule.getMethod()).isEqualTo("method");
|
||||
assertThat(pathWildcardRule.getServiceId()).isEqualTo("serviceId");
|
||||
assertThat(pathWildcardRule.getServiceName()).isEqualTo("serviceName");
|
||||
assertThat(pathWildcardRule.getNamespaceId()).isEqualTo("namespaceId");
|
||||
assertThat(pathWildcardRule.getNamespaceName()).isEqualTo("namespaceName");
|
||||
assertThat(pathWildcardRule.getTimeout()).isEqualTo(100);
|
||||
assertThat(pathWildcardRule.getWildCardIds()).containsExactly("wildCardId");
|
||||
assertThat(pathWildcardRule.toString()).isEqualTo("PathWildcardRule{wildCardId='wildCardId', groupId='groupId', wildCardPath='wildCardPath', method='method', serviceId='serviceId', serviceName='serviceName', namespaceId='namespaceId', namespaceName='namespaceName', wildCardIds=[wildCardId], timeout=100}");
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link PluginArgInfo}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class PluginArgInfoTest {
|
||||
|
||||
@Test
|
||||
public void testPluginArgInfo() {
|
||||
PluginArgInfo pluginArgInfo = new PluginArgInfo();
|
||||
pluginArgInfo.setId("123");
|
||||
pluginArgInfo.setPluginId("456");
|
||||
pluginArgInfo.setKey("key");
|
||||
pluginArgInfo.setValue("value");
|
||||
|
||||
assertThat(pluginArgInfo.getId()).isEqualTo("123");
|
||||
assertThat(pluginArgInfo.getPluginId()).isEqualTo("456");
|
||||
assertThat(pluginArgInfo.getKey()).isEqualTo("key");
|
||||
assertThat(pluginArgInfo.getValue()).isEqualTo("value");
|
||||
}
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link PluginDetail}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class PluginDetailTest {
|
||||
|
||||
@Test
|
||||
public void testPluginDetail() {
|
||||
PluginDetail pluginDetail = new PluginDetail();
|
||||
pluginDetail.setId("id");
|
||||
pluginDetail.setPluginArgInfos(new ArrayList<>());
|
||||
PluginArgInfo pluginArgInfo = new PluginArgInfo();
|
||||
pluginArgInfo.setId("123");
|
||||
pluginArgInfo.setPluginId("456");
|
||||
pluginArgInfo.setKey("key");
|
||||
pluginArgInfo.setValue("value");
|
||||
pluginDetail.getPluginArgInfos().add(pluginArgInfo);
|
||||
|
||||
PluginDetail otherPluginDetail = new PluginDetail();
|
||||
otherPluginDetail.setId("id");
|
||||
otherPluginDetail.setPluginArgInfos(new ArrayList<>());
|
||||
otherPluginDetail.getPluginArgInfos().add(pluginArgInfo);
|
||||
|
||||
assertThat(pluginDetail).isEqualTo(pluginDetail);
|
||||
assertThat(pluginDetail).isNotEqualTo(pluginArgInfo);
|
||||
assertThat(pluginDetail).isEqualTo(otherPluginDetail);
|
||||
assertThat(pluginDetail.hashCode()).isEqualTo(otherPluginDetail.hashCode());
|
||||
}
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import com.tencent.tsf.gateway.core.exception.TsfGatewayException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
/**
|
||||
* Tests for {@link PluginInfo}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class PluginInfoTest {
|
||||
|
||||
@Test
|
||||
public void testPluginInfo() {
|
||||
PluginInfo pluginInfo = new PluginInfo();
|
||||
|
||||
assertThatThrownBy(pluginInfo::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("插件名称参数错误");
|
||||
pluginInfo.setName("name");
|
||||
|
||||
assertThatThrownBy(pluginInfo::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("插件类型参数错误");
|
||||
pluginInfo.setType("type");
|
||||
|
||||
pluginInfo.setId("id");
|
||||
pluginInfo.setOrder(1);
|
||||
pluginInfo.setDescription("description");
|
||||
pluginInfo.setCreatedTime("createdTime");
|
||||
pluginInfo.setUpdatedTime("updatedTime");
|
||||
assertThatNoException().isThrownBy(pluginInfo::check);
|
||||
|
||||
assertThat(pluginInfo.getId()).isEqualTo("id");
|
||||
assertThat(pluginInfo.getName()).isEqualTo("name");
|
||||
assertThat(pluginInfo.getType()).isEqualTo("type");
|
||||
assertThat(pluginInfo.getOrder()).isEqualTo(1);
|
||||
assertThat(pluginInfo.getDescription()).isEqualTo("description");
|
||||
assertThat(pluginInfo.getCreatedTime()).isEqualTo("createdTime");
|
||||
assertThat(pluginInfo.getUpdatedTime()).isEqualTo("updatedTime");
|
||||
assertThat(pluginInfo.toString()).isEqualTo("PluginInfo{id='id', name='name', type='type', order=1, description='description', createdTime='createdTime', updatedTime='updatedTime'}");
|
||||
}
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link PluginInstanceInfoResult}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class PluginInstanceInfoResultTest {
|
||||
|
||||
@Test
|
||||
public void testPluginInstanceInfoResult() {
|
||||
PluginInstanceInfoResult pluginInstanceInfoResult = new PluginInstanceInfoResult();
|
||||
pluginInstanceInfoResult.setGatewayId("gatewayId");
|
||||
pluginInstanceInfoResult.setGatewayName("gatewayName");
|
||||
pluginInstanceInfoResult.setGatewayGroupId("gatewayGroupId");
|
||||
pluginInstanceInfoResult.setReversion(1);
|
||||
pluginInstanceInfoResult.setUpdatedTime("updatedTime");
|
||||
pluginInstanceInfoResult.setResult(new ArrayList<>());
|
||||
pluginInstanceInfoResult.getResult().add(new PluginInstanceInfo());
|
||||
|
||||
assertThat(pluginInstanceInfoResult.getGatewayId()).isEqualTo("gatewayId");
|
||||
assertThat(pluginInstanceInfoResult.getGatewayName()).isEqualTo("gatewayName");
|
||||
assertThat(pluginInstanceInfoResult.getGatewayGroupId()).isEqualTo("gatewayGroupId");
|
||||
assertThat(pluginInstanceInfoResult.getReversion()).isEqualTo(1);
|
||||
assertThat(pluginInstanceInfoResult.getUpdatedTime()).isEqualTo("updatedTime");
|
||||
assertThat(pluginInstanceInfoResult.getResult()).isNotEmpty();
|
||||
assertThat(pluginInstanceInfoResult.getResult()).hasSize(1);
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link PluginInstanceInfo}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class PluginInstanceInfoTest {
|
||||
|
||||
@Test
|
||||
public void testPluginInstanceInfo() {
|
||||
PluginInstanceInfo pluginInstanceInfo = new PluginInstanceInfo();
|
||||
pluginInstanceInfo.setScopeValue("scopeValue");
|
||||
pluginInstanceInfo.setScopeType("scopeType");
|
||||
pluginInstanceInfo.setPluginDetails(new ArrayList<>());
|
||||
pluginInstanceInfo.getPluginDetails().add(new PluginDetail());
|
||||
|
||||
assertThat(pluginInstanceInfo.getScopeValue()).isEqualTo("scopeValue");
|
||||
assertThat(pluginInstanceInfo.getScopeType()).isEqualTo("scopeType");
|
||||
assertThat(pluginInstanceInfo.getPluginDetails()).isNotEmpty();
|
||||
assertThat(pluginInstanceInfo.getPluginDetails()).hasSize(1);
|
||||
}
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link PluginPayload}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class PluginPayloadTest {
|
||||
|
||||
@Test
|
||||
public void testPluginPayload() {
|
||||
PluginPayload pluginPayload = new PluginPayload();
|
||||
pluginPayload.setRequestHeaders(new HashMap<>());
|
||||
pluginPayload.getRequestHeaders().put("request", "test");
|
||||
pluginPayload.setResponseHeaders(new HashMap<>());
|
||||
pluginPayload.getResponseHeaders().put("response", "test");
|
||||
pluginPayload.setRequestCookies(new HashMap<>());
|
||||
pluginPayload.getRequestCookies().put("cookie", "test");
|
||||
pluginPayload.setParameterMap(new HashMap<>());
|
||||
pluginPayload.getParameterMap().put("param", new String[] {"test"});
|
||||
pluginPayload.setRedirectUrl("redirectUrl");
|
||||
|
||||
assertThat(pluginPayload.getRedirectUrl()).isEqualTo("redirectUrl");
|
||||
}
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.tencent.cloud.plugin.gateway.context.Position;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link RequestTransformerPluginInfo}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class RequestTransformerPluginInfoTest {
|
||||
|
||||
@Test
|
||||
public void testRequestTransformerPluginInfo() {
|
||||
RequestTransformerPluginInfo requestTransformerPluginInfo = new RequestTransformerPluginInfo();
|
||||
List<TransformerTag> filters = new ArrayList<>();
|
||||
TransformerTag transformerTag = new TransformerTag();
|
||||
transformerTag.setTagPosition(Position.COOKIE);
|
||||
filters.add(transformerTag);
|
||||
requestTransformerPluginInfo.setFilters(filters);
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
TransformerAction transformerAction = new TransformerAction();
|
||||
transformerAction.setAction("add");
|
||||
transformerAction.setTagPosition(Position.HEADER);
|
||||
transformerAction.setTagName("tagName");
|
||||
transformerAction.setTagValue("tagValue");
|
||||
transformerAction.setWeight(100);
|
||||
actions.add(transformerAction);
|
||||
requestTransformerPluginInfo.setActions(actions);
|
||||
|
||||
assertThat(requestTransformerPluginInfo.toString()).isEqualTo("RequestTransformerPluginInfo{filters=[TransformerTag{tagPosition=COOKIE} TagCondition{tagId=null, tagType='null', tagField='null', tagOperator='null', tagValue='null'}], actions=[TransformerAction{action='add', tagPosition=HEADER, tagName='tagName', tagValue='tagValue', weight=100}]}");
|
||||
}
|
||||
}
|
@ -0,0 +1,107 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.tencent.cloud.common.util.JacksonUtils;
|
||||
import com.tencent.cloud.plugin.gateway.context.Position;
|
||||
import com.tencent.tsf.gateway.core.exception.TsfGatewayException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
/**
|
||||
* Test for {@link RequestTransformerPlugin}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class RequestTransformerPluginTest {
|
||||
|
||||
@Test
|
||||
public void testRequestTransformerPlugin() {
|
||||
RequestTransformerPlugin requestTransformerPlugin = new RequestTransformerPlugin();
|
||||
|
||||
assertThatThrownBy(requestTransformerPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("插件名称参数错误");
|
||||
requestTransformerPlugin.setName("reqTransformer");
|
||||
|
||||
assertThatThrownBy(requestTransformerPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("插件类型参数错误");
|
||||
requestTransformerPlugin.setType("ReqTransformer");
|
||||
|
||||
assertThatThrownBy(requestTransformerPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("验证插件参数");
|
||||
requestTransformerPlugin.setPluginInfo(generateRequestTransformerPluginInfo(-1).substring(2));
|
||||
|
||||
assertThatThrownBy(requestTransformerPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("验证插件格式");
|
||||
requestTransformerPlugin.setPluginInfo(generateRequestTransformerPluginInfo(-1));
|
||||
|
||||
assertThatThrownBy(requestTransformerPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("权重值不合法");
|
||||
requestTransformerPlugin.setPluginInfo(generateRequestTransformerPluginInfo(null));
|
||||
assertThatThrownBy(requestTransformerPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("权重值不合法");
|
||||
requestTransformerPlugin.setPluginInfo(generateRequestTransformerPluginInfo(101));
|
||||
assertThatThrownBy(requestTransformerPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("验证插件权重失败,当前权重总和为");
|
||||
requestTransformerPlugin.setPluginInfo(generateRequestTransformerPluginInfo(50));
|
||||
|
||||
assertThatNoException().isThrownBy(requestTransformerPlugin::check);
|
||||
assertThat(requestTransformerPlugin.toString()).isEqualTo("PluginInfo{id='null', name='reqTransformer', type='ReqTransformer', order=null, description='null', createdTime='null', updatedTime='null'}");
|
||||
requestTransformerPlugin.setRequestTransformerPluginInfo(JacksonUtils.deserialize(generateRequestTransformerPluginInfo(50), new TypeReference<RequestTransformerPluginInfo>() { }));
|
||||
assertThatNoException().isThrownBy(requestTransformerPlugin::check);
|
||||
|
||||
assertThat(requestTransformerPlugin.getPluginInfo()).isEqualTo(generateRequestTransformerPluginInfo(50));
|
||||
assertThat(requestTransformerPlugin.getRequestTransformerPluginInfo()).isNotNull();
|
||||
assertThat(requestTransformerPlugin.toString()).isEqualTo("PluginInfo{id='null', name='reqTransformer', type='ReqTransformer', order=null, description='null', createdTime='null', updatedTime='null'}");
|
||||
}
|
||||
|
||||
private String generateRequestTransformerPluginInfo(Integer weight) {
|
||||
RequestTransformerPluginInfo requestTransformerPluginInfo = new RequestTransformerPluginInfo();
|
||||
List<TransformerTag> filters = new ArrayList<>();
|
||||
TransformerTag transformerTag = new TransformerTag();
|
||||
transformerTag.setTagPosition(Position.COOKIE);
|
||||
filters.add(transformerTag);
|
||||
requestTransformerPluginInfo.setFilters(filters);
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
TransformerAction transformerAction = new TransformerAction();
|
||||
transformerAction.setAction("add");
|
||||
transformerAction.setTagPosition(Position.HEADER);
|
||||
transformerAction.setTagName("tagName");
|
||||
transformerAction.setTagValue("tagValue");
|
||||
if (weight != null) {
|
||||
transformerAction.setWeight(weight);
|
||||
}
|
||||
actions.add(transformerAction);
|
||||
requestTransformerPluginInfo.setActions(actions);
|
||||
return JacksonUtils.serialize2Json(requestTransformerPluginInfo);
|
||||
}
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import com.tencent.cloud.plugin.gateway.context.Position;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link TagPluginInfo}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class TagPluginInfoTest {
|
||||
|
||||
@Test
|
||||
public void testTagPluginInfo() {
|
||||
TagPluginInfo tagPluginInfo = new TagPluginInfo();
|
||||
tagPluginInfo.setTagPosition(Position.QUERY);
|
||||
tagPluginInfo.setPreTagName("preTagName");
|
||||
tagPluginInfo.setPostTagName("postTagName");
|
||||
tagPluginInfo.setTraceIdEnabled("Y");
|
||||
|
||||
assertThat(tagPluginInfo.getTagPosition()).isEqualTo(Position.QUERY);
|
||||
assertThat(tagPluginInfo.getPreTagName()).isEqualTo("preTagName");
|
||||
assertThat(tagPluginInfo.getPostTagName()).isEqualTo("postTagName");
|
||||
assertThat(tagPluginInfo.getTraceIdEnabled()).isEqualTo("Y");
|
||||
}
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import com.tencent.tsf.gateway.core.exception.TsfGatewayException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
/**
|
||||
* Test for {@link TagPlugin}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class TagPluginTest {
|
||||
|
||||
@Test
|
||||
public void testTagPlugin() {
|
||||
TagPlugin tagPlugin = new TagPlugin();
|
||||
|
||||
assertThatThrownBy(tagPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("插件名称参数错误");
|
||||
tagPlugin.setName("tag");
|
||||
|
||||
assertThatThrownBy(tagPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("插件类型参数错误");
|
||||
tagPlugin.setType("Tag");
|
||||
|
||||
assertThatThrownBy(tagPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("验证Tag插件参数");
|
||||
tagPlugin.setTagPluginInfoList("[{\"tagPosition\":\"QUERY\",\"preTagName\":\"preTagName\",\"postTagName\":\"postTagName\",\"traceIdEnabled\":\"Y\"");
|
||||
|
||||
assertThatThrownBy(tagPlugin::check)
|
||||
.isExactlyInstanceOf(TsfGatewayException.class)
|
||||
.hasMessageContaining("验证Tag插件参数");
|
||||
tagPlugin.setTagPluginInfoList("[{\"tagPosition\":\"QUERY\",\"preTagName\":\"preTagName\",\"postTagName\":\"postTagName\",\"traceIdEnabled\":\"Y\"}]");
|
||||
|
||||
assertThatNoException().isThrownBy(tagPlugin::check);
|
||||
|
||||
assertThat(tagPlugin.getTagPluginInfoList()).isNotBlank();
|
||||
}
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import com.tencent.cloud.plugin.gateway.context.Position;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link TransformerAction}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class TransformerActionTest {
|
||||
|
||||
@Test
|
||||
public void testTransformerAction() {
|
||||
TransformerAction transformerAction = new TransformerAction();
|
||||
transformerAction.setAction("add");
|
||||
transformerAction.setTagPosition(Position.HEADER);
|
||||
transformerAction.setTagName("tagName");
|
||||
transformerAction.setTagValue("tagValue");
|
||||
transformerAction.setWeight(1);
|
||||
|
||||
assertThat(transformerAction.getAction()).isEqualTo("add");
|
||||
assertThat(transformerAction.getTagPosition()).isEqualTo(Position.HEADER);
|
||||
assertThat(transformerAction.getTagName()).isEqualTo("tagName");
|
||||
assertThat(transformerAction.getTagValue()).isEqualTo("tagValue");
|
||||
assertThat(transformerAction.getWeight()).isEqualTo(1);
|
||||
assertThat(transformerAction.toString()).isEqualTo("TransformerAction{action='add', tagPosition=HEADER, tagName='tagName', tagValue='tagValue', weight=1}");
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.model;
|
||||
|
||||
import com.tencent.cloud.plugin.gateway.context.Position;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link TransformerTag}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class TransformerTagTest {
|
||||
|
||||
@Test
|
||||
public void testTransformerTag() {
|
||||
TransformerTag transformerTag = new TransformerTag();
|
||||
transformerTag.setTagPosition(Position.TSF_TAG);
|
||||
|
||||
assertThat(transformerTag.getTagPosition()).isEqualTo(Position.TSF_TAG);
|
||||
assertThat(transformerTag.toString()).isEqualTo("TransformerTag{tagPosition=TSF_TAG} TagCondition{tagId=null, tagType='null', tagField='null', tagOperator='null', tagValue='null'}");
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.util;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/**
|
||||
* Test for {@link CookieUtil}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class CookieUtilTest {
|
||||
|
||||
@Test
|
||||
public void testBuildCookie() {
|
||||
StringBuilder stringBuilder1 = new StringBuilder();
|
||||
CookieUtil.buildCookie(stringBuilder1, new HashMap<>() {{
|
||||
put("test1", "123");
|
||||
put("test2", "123");
|
||||
}});
|
||||
|
||||
StringBuilder stringBuilder2 = new StringBuilder();
|
||||
stringBuilder2.append("aaa=bbb");
|
||||
CookieUtil.buildCookie(stringBuilder2, new HashMap<>() {{
|
||||
put("test1", "123");
|
||||
put("test2", "123");
|
||||
}});
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.util;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for {@link IdGenerator}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class IdGeneratorTest {
|
||||
|
||||
@Test
|
||||
public void testGenerateId() {
|
||||
String uuid = IdGenerator.generateId("test");
|
||||
assertThat(uuid).isNotBlank();
|
||||
}
|
||||
}
|
@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.util;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import shade.polaris.org.jose4j.json.JsonUtil;
|
||||
import shade.polaris.org.jose4j.jwk.RsaJsonWebKey;
|
||||
import shade.polaris.org.jose4j.jws.JsonWebSignature;
|
||||
import shade.polaris.org.jose4j.jwt.JwtClaims;
|
||||
import shade.polaris.org.jose4j.jwt.MalformedClaimException;
|
||||
import shade.polaris.org.jose4j.lang.JoseException;
|
||||
|
||||
/**
|
||||
* Test for Jwt.
|
||||
*
|
||||
* @author vmershen
|
||||
**/
|
||||
public class JwtTest {
|
||||
|
||||
@Test
|
||||
public void testJwt() throws JoseException, MalformedClaimException {
|
||||
RsaJsonWebKey jwk = new RsaJsonWebKey(JsonUtil.parseJson("{\"kty\":\"RSA\",\"alg\":\"RS256\",\"n\":\"mrX5ROEw4kCYDXR94FQsm33gr5o5dQXvuOoe-eG_yvdNW83MMt9GgG_eBBq_1b7HgyP9lo15BfKX3GH1igCjEKoXJxcHC5xox4xC0tvbBNCDwG_987ZsqlgCb4f7X66DCcHh17AyAHYa8JhO2kXvtD1OIQxSajSgmk1C1sxI5kqJXfvJwRLcCEK87P6Bs9YNLnnJeouSkYce04AhspmyQKKax4GllbMjcrUUMRoqpCBMklh5Pgl9sOGRLo-6uzzowtI_SyF03YsE2ejh9m-YWqTYsx7PIg6SdWrNRIprKtjnhc9nk-QBzWbOTFH3bpMoXl0T9KPndaLpi1pXtaej9Q\",\"e\":\"AQAB\",\"d\":\"lL9vqdUl7fMS_qTJPf1QYjPV6qBKrAQIJ28aV0DA6YF6pFCrCyJ3I5frC2E4nmbuZl0dPTpKaPiFIAQjUwsnvSb8Wb4fLP-2El3-BcQSwX9FnalPrpnvwpwZw2gnvSgJn0EFRh6HBMCJSFf4QI7LWC01SDsTpj9xRsoQAHurf5YZ8YRpi_-XEWBaL-4R_RxpoeAnSgSbJkcGoJNcxqwWbCun37KYBS_71sd155VWycMd-uHtTRnW6SenVG49pexXq-tIQxOwmatpTj0XF7hhshKgdTF1xXPbMSX6XOvxiy929jPMercBL_-OUu0PPUZTTVp0gNziGdevzufHkEfHxQ\",\"p\":\"5dOs8Q0SHIuCq-gAOx2c2JaqXzPRsmmZ7nXx1P1jbddDIenVPA6q5zUVqXIRRQgMA7AdD9x7anJ2_kaKSFoE2D8peuObvmjrbmJeYE4F4138pNESOHlBmhUH93Oo4i5TvmNZ5hxu3CmonGKMafeDoMpopN15yeDGkTVFKoOfuys\",\"q\":\"rFRhmJIIj3o__CbjVOlUgiVzrk-ZgK9jGXHhyt6LELQae1nUiZNZuwZeHwgzTonsTMJ2JHnmCuDpwuhjf_kha5KHeuczE7gmnlaGd3s6kaKDyB9bXbMTs122SnNiB-lJcwm4wRNWI-irSh8PyHSQVnjvKkQCCEPi4i0Ky1KgDV8\",\"dp\":\"qBUJNDn09v9pD8Ra9uEPZq-55mqFgFAPDgEgXj76yshWBqV3F7c6cmG2d_g-fRgHgWL5vjHn6M_SCuEYHRYI2QZIleGEc9tT46T5lME7OS_xp7Bn_PlhawjajLT_3Hs5L9KFWu-MfGPTNpw0SQOGNsARjBGWEnjbgDNPZGpjFYU\",\"dq\":\"F_0rFNUHUgm_jHdRYAmXFQLnppU4FhzUG7-podb23t1jblZj6r7TV-CcC4_VrJIwjcLoNU2uw0bp45L7_t2MVHAyYd57Urxoy9PZphpGXe2UkLAkxNdf37Ek5hpHxDgqXFQ3HtF1RUxnQ8stJEdtrEvrZyPOcJ4aoEeK4CDhXNs\",\"qi\":\"QdwkKs9n6jswVsbYKprvpNr2Mbg-RBPp5xx1p-ypVJnFOd_lnCA6P3gRJ-pe6tSCIB6AYViEhZpzKMSu47f27_38VHkH9qOOL38ZVeVFo8Yt8lkBwMEKQdDOghfF74L5Fczo9bH7QX679dC847cDEa1oaV2Cdv6XcSKGywwvq3Y\"}"));
|
||||
// Create the Claims, which will be the content of the JWT
|
||||
JwtClaims claims = new JwtClaims();
|
||||
claims.setIssuer("Issuer"); // who creates the token and signs it
|
||||
claims.setAudience("Audience"); // to whom the token is intended to be sent
|
||||
claims.setExpirationTimeMinutesInTheFuture(1); // time when the token will expire (10 minutes from now)
|
||||
claims.setGeneratedJwtId(); // a unique identifier for the token
|
||||
claims.setIssuedAtToNow(); // when the token was issued/created (now)
|
||||
claims.setNotBeforeMinutesInThePast(2); // time before which the token is not yet valid (2 minutes ago)
|
||||
claims.setSubject("subject"); // the subject/principal is whom the token is about
|
||||
claims.setClaim("email", "mail@example.com"); // additional claims/attributes about the subject can be added
|
||||
List<String> groups = Arrays.asList("group-one", "other-group", "group-three");
|
||||
claims.setStringListClaim("groups", groups); // multi-valued claims work too and will end up as a JSON array
|
||||
|
||||
JsonWebSignature jws = new JsonWebSignature();
|
||||
|
||||
// The payload of the JWS is JSON content of the JWT Claims
|
||||
jws.setPayload(claims.toJson());
|
||||
|
||||
// The JWT is signed using the private key
|
||||
jws.setKey(jwk.getPrivateKey());
|
||||
|
||||
// Set the Key ID (kid) header because it's just the polite thing to do.
|
||||
// We only have one key in this example but a using a Key ID helps
|
||||
// facilitate a smooth key rollover process
|
||||
jws.setKeyIdHeaderValue("kid");
|
||||
|
||||
// Set the signature algorithm on the JWT/JWS that will integrity protect the claims
|
||||
jws.setAlgorithmHeaderValue(jwk.getAlgorithm());
|
||||
|
||||
// Sign the JWS and produce the compact serialization or the complete JWT/JWS
|
||||
// representation, which is a string consisting of three dot ('.') separated
|
||||
// base64url-encoded parts in the form Header.Payload.Signature
|
||||
// If you wanted to encrypt it, you can simply set this jwt as the payload
|
||||
// of a JsonWebEncryption object and set the cty (Content Type) header to "jwt".
|
||||
String jwt = jws.getCompactSerialization();
|
||||
|
||||
long expirationTime = claims.getExpirationTime().getValueInMillis();
|
||||
Instant instant = Instant.ofEpochMilli(expirationTime);
|
||||
ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("Asia/Shanghai"));
|
||||
DateTimeFormatter formatter = DateTimeFormatter
|
||||
.ofPattern("yyyy-MM-dd HH:mm:ss z", Locale.SIMPLIFIED_CHINESE);
|
||||
String formattedTime = formatter.format(zonedDateTime);
|
||||
String msg = String.format("JWT expired at (%d -> %s)", expirationTime, formattedTime);
|
||||
System.out.println(msg);
|
||||
System.out.println(jwt);
|
||||
}
|
||||
}
|
@ -0,0 +1,916 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.util;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import com.tencent.cloud.plugin.gateway.context.Position;
|
||||
import com.tencent.tsf.gateway.core.TsfGatewayRequest;
|
||||
import com.tencent.tsf.gateway.core.exception.TsfGatewayException;
|
||||
import com.tencent.tsf.gateway.core.model.PluginDetail;
|
||||
import com.tencent.tsf.gateway.core.model.PluginPayload;
|
||||
import com.tencent.tsf.gateway.core.model.RequestTransformerPluginInfo;
|
||||
import com.tencent.tsf.gateway.core.model.TagPluginInfo;
|
||||
import com.tencent.tsf.gateway.core.model.TransformerAction;
|
||||
import com.tencent.tsf.gateway.core.model.TransformerTag;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.MockedStatic;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import org.springframework.tsf.core.TsfContext;
|
||||
import org.springframework.tsf.core.entity.Tag;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.anyMap;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
|
||||
/**
|
||||
* Test for {@link PluginUtil}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class PluginUtilTest {
|
||||
|
||||
private TsfGatewayRequest tsfGatewayRequest;
|
||||
private PluginPayload pluginPayload;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws URISyntaxException {
|
||||
// init TsfGatewayRequest
|
||||
tsfGatewayRequest = new TsfGatewayRequest();
|
||||
tsfGatewayRequest.setUri(new URI("http://localhost:8080/test_group/test_namespace/test_service/api/v1/users/123"));
|
||||
|
||||
// set request headers
|
||||
Map<String, String> requestHeaders = new HashMap<>();
|
||||
requestHeaders.put("x-user-id", "user123");
|
||||
requestHeaders.put("authorization", "Bearer token123");
|
||||
tsfGatewayRequest.setRequestHeaders(requestHeaders);
|
||||
|
||||
// set request parameters
|
||||
Map<String, String[]> parameterMap = new HashMap<>();
|
||||
parameterMap.put("userId", new String[] {"123", "456"});
|
||||
parameterMap.put("type", new String[] {"admin"});
|
||||
tsfGatewayRequest.setParameterMap(parameterMap);
|
||||
|
||||
// set request cookies
|
||||
Map<String, String> cookieMap = new HashMap<>();
|
||||
cookieMap.put("sessionId", "session123");
|
||||
cookieMap.put("lang", "zh-CN");
|
||||
tsfGatewayRequest.setCookieMap(cookieMap);
|
||||
|
||||
// init PluginPayload
|
||||
pluginPayload = new PluginPayload();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSortPluginDetail() {
|
||||
List<PluginDetail> pluginDetails = new ArrayList<>();
|
||||
PluginDetail pluginDetail = new PluginDetail();
|
||||
pluginDetail.setName("test");
|
||||
pluginDetails.add(pluginDetail);
|
||||
Stream<PluginDetail> pluginDetailStream = Stream.of(pluginDetails).flatMap(Collection::stream);
|
||||
List<PluginDetail> result = PluginUtil.sortPluginDetail(pluginDetailStream);
|
||||
assertThat(result).isNotEmpty();
|
||||
assertThat(result).hasSize(1);
|
||||
assertThat(result.get(0).getName()).isEqualTo("test");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeserializeTagPluginInfoList() {
|
||||
String tagPluginInfoListJson = "[{\"tagPosition\":\"QUERY\",\"preTagName\":\"preTagName\",\"postTagName\":\"postTagName\",\"traceIdEnabled\":\"Y\"}]";
|
||||
List<TagPluginInfo> tagPluginInfoList = PluginUtil.deserializeTagPluginInfoList(tagPluginInfoListJson);
|
||||
assertThat(tagPluginInfoList).isNotEmpty();
|
||||
assertThat(tagPluginInfoList).hasSize(1);
|
||||
TagPluginInfo tagPluginInfo = tagPluginInfoList.get(0);
|
||||
assertThat(tagPluginInfo.getTagPosition().name()).isEqualTo("QUERY");
|
||||
assertThat(tagPluginInfo.getPreTagName()).isEqualTo("preTagName");
|
||||
assertThat(tagPluginInfo.getPostTagName()).isEqualTo("postTagName");
|
||||
assertThat(tagPluginInfo.getTraceIdEnabled()).isEqualTo("Y");
|
||||
|
||||
assertThatThrownBy(() -> {
|
||||
PluginUtil.deserializeTagPluginInfoList("[{\"tagPosition\":\"QUERY\",\"preTagName\":\"preTagName\",\"postTagName\":\"postTagName\",\"traceIdEnabled\":\"Y\"");
|
||||
}).isInstanceOf(TsfGatewayException.class);
|
||||
|
||||
assertThatThrownBy(() -> {
|
||||
PluginUtil.deserializeTagPluginInfoList("");
|
||||
}).isInstanceOf(TsfGatewayException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_EmptyTagPluginList() {
|
||||
String emptyJson = "[]";
|
||||
PluginPayload result = PluginUtil.transferToTag(emptyJson, tsfGatewayRequest, pluginPayload);
|
||||
assertThat(result).isEqualTo(pluginPayload);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_QueryPosition() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
String tagPluginJson = "[{\"tagPosition\":\"QUERY\",\"preTagName\":\"userId\",\"postTagName\":\"user_id\",\"traceIdEnabled\":\"N\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_QueryPosition_WithoutPostTagName() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
String tagPluginJson = "[{\"tagPosition\":\"QUERY\",\"preTagName\":\"userId\",\"traceIdEnabled\":\"N\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_QueryPosition_NotFound() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
String tagPluginJson = "[{\"tagPosition\":\"QUERY\",\"preTagName\":\"nonExistentParam\",\"postTagName\":\"test_tag\",\"traceIdEnabled\":\"N\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_CookiePosition() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
String tagPluginJson = "[{\"tagPosition\":\"COOKIE\",\"preTagName\":\"sessionId\",\"postTagName\":\"session_id\",\"traceIdEnabled\":\"N\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_CookiePosition_WithoutPostTagName() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
String tagPluginJson = "[{\"tagPosition\":\"COOKIE\",\"preTagName\":\"sessionId\",\"traceIdEnabled\":\"N\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_CookiePosition_NotFound() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
String tagPluginJson = "[{\"tagPosition\":\"COOKIE\",\"preTagName\":\"nonExistentCookie\",\"postTagName\":\"test_tag\",\"traceIdEnabled\":\"N\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_HeaderPosition() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
String tagPluginJson = "[{\"tagPosition\":\"HEADER\",\"preTagName\":\"x-user-id\",\"postTagName\":\"user_id\",\"traceIdEnabled\":\"N\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_HeaderPosition_WithoutPostTagName() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
String tagPluginJson = "[{\"tagPosition\":\"HEADER\",\"preTagName\":\"x-user-id\",\"traceIdEnabled\":\"N\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_HeaderPosition_NotFound() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
String tagPluginJson = "[{\"tagPosition\":\"HEADER\",\"preTagName\":\"non-existent-header\",\"postTagName\":\"test_tag\",\"traceIdEnabled\":\"N\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_PathPosition() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
String tagPluginJson = "[{\"tagPosition\":\"PATH\",\"preTagName\":\"/api/v1/users/{userId}\",\"postTagName\":\"user_id\",\"traceIdEnabled\":\"N\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_PathPosition_NotMatched() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
String tagPluginJson = "[{\"tagPosition\":\"PATH\",\"preTagName\":\"/api/v2/products/{productId}\",\"postTagName\":\"product_id\",\"traceIdEnabled\":\"N\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_PathPosition_WithoutPostTagName() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
String tagPluginJson = "[{\"tagPosition\":\"PATH\",\"preTagName\":\"/api/v1/users/{userId}\",\"traceIdEnabled\":\"N\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_PathPosition_EmptyPath() throws Exception {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
// set empty path
|
||||
tsfGatewayRequest.setUri(new URI("http://localhost:8080"));
|
||||
String tagPluginJson = "[{\"tagPosition\":\"PATH\",\"preTagName\":\"/api/v1/users/{userId}\",\"postTagName\":\"user_id\",\"traceIdEnabled\":\"N\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_PathPosition_PathWithoutLeadingSlash() throws Exception {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
tsfGatewayRequest.setUri(new URI("http://localhost:8080/api/v1/users/123"));
|
||||
String tagPluginJson = "[{\"tagPosition\":\"PATH\",\"preTagName\":\"/api/v1/users/{userId}\",\"postTagName\":\"user_id\",\"traceIdEnabled\":\"N\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_WithTraceIdEnabled() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
String tagPluginJson = "[{\"tagPosition\":\"QUERY\",\"preTagName\":\"userId\",\"postTagName\":\"user_id\",\"traceIdEnabled\":\"Y\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
// verify that the response headers contain the expected keys
|
||||
assertThat(result.getResponseHeaders()).isNotNull();
|
||||
assertThat(result.getResponseHeaders()).containsKey("user_id");
|
||||
assertThat(result.getResponseHeaders()).containsKey("X-Tsf-TraceId");
|
||||
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_MultipleTagPlugins() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
String tagPluginJson = "[" +
|
||||
"{\"tagPosition\":\"QUERY\",\"preTagName\":\"userId\",\"postTagName\":\"user_id\",\"traceIdEnabled\":\"N\"}," +
|
||||
"{\"tagPosition\":\"HEADER\",\"preTagName\":\"x-user-id\",\"postTagName\":\"header_user_id\",\"traceIdEnabled\":\"N\"}," +
|
||||
"{\"tagPosition\":\"COOKIE\",\"preTagName\":\"sessionId\",\"postTagName\":\"session_id\",\"traceIdEnabled\":\"N\"}" +
|
||||
"]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_WithExistingResponseHeaders() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
// set existing response headers
|
||||
Map<String, String> existingHeaders = new HashMap<>();
|
||||
existingHeaders.put("existing-header", "existing-value");
|
||||
pluginPayload.setResponseHeaders(existingHeaders);
|
||||
|
||||
String tagPluginJson = "[{\"tagPosition\":\"QUERY\",\"preTagName\":\"userId\",\"postTagName\":\"user_id\",\"traceIdEnabled\":\"Y\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
// verify that the response headers contain the expected keys
|
||||
assertThat(result.getResponseHeaders()).containsKey("existing-header");
|
||||
assertThat(result.getResponseHeaders()).containsKey("user_id");
|
||||
assertThat(result.getResponseHeaders()).containsKey("X-Tsf-TraceId");
|
||||
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTransferToTag_DefaultPosition() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
// create a TagPluginInfo with a non-existent Position
|
||||
TagPluginInfo tagPluginInfo = new TagPluginInfo();
|
||||
tagPluginInfo.setTagPosition(Position.TSF_TAG); // 使用一个不在switch中处理的Position
|
||||
tagPluginInfo.setPreTagName("testTag");
|
||||
tagPluginInfo.setPostTagName("test_tag");
|
||||
tagPluginInfo.setTraceIdEnabled("N");
|
||||
|
||||
String tagPluginJson = "[{\"tagPosition\":\"TSF_TAG\",\"preTagName\":\"testTag\",\"postTagName\":\"test_tag\",\"traceIdEnabled\":\"N\"}]";
|
||||
|
||||
PluginPayload result = PluginUtil.transferToTag(tagPluginJson, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPredicateJsonFormat() {
|
||||
String tagPluginInfoListJson = "";
|
||||
assertThat(PluginUtil.predicateJsonFormat(tagPluginInfoListJson)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_NullRequestTransformerPluginInfo() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(null, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verifyNoInteractions();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_EmptyActions() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
pluginInfo.setActions(new ArrayList<>());
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verifyNoInteractions();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_NullActions() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
pluginInfo.setActions(null);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verifyNoInteractions();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_NoFilters_TsfTagAction() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
|
||||
TransformerAction action = new TransformerAction();
|
||||
action.setTagPosition(Position.TSF_TAG);
|
||||
action.setTagName("test-tag");
|
||||
action.setTagValue("test-value");
|
||||
action.setWeight(100);
|
||||
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
actions.add(action);
|
||||
pluginInfo.setActions(actions);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_NoFilters_HeaderAction() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
|
||||
TransformerAction action = new TransformerAction();
|
||||
action.setTagPosition(Position.HEADER);
|
||||
action.setTagName("X-Custom-Header");
|
||||
action.setTagValue("custom-value");
|
||||
action.setWeight(100);
|
||||
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
actions.add(action);
|
||||
pluginInfo.setActions(actions);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
assertThat(result.getRequestHeaders()).isNotNull();
|
||||
assertThat(result.getRequestHeaders()).containsEntry("X-Custom-Header", "custom-value");
|
||||
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_NoFilters_HeaderAction_WithExistingHeaders() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
// set existing request headers
|
||||
Map<String, String> existingHeaders = new HashMap<>();
|
||||
existingHeaders.put("existing-header", "existing-value");
|
||||
pluginPayload.setRequestHeaders(existingHeaders);
|
||||
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
|
||||
// create action
|
||||
TransformerAction action = new TransformerAction();
|
||||
action.setTagPosition(Position.HEADER);
|
||||
action.setTagName("X-Custom-Header");
|
||||
action.setTagValue("custom-value");
|
||||
action.setWeight(100);
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
actions.add(action);
|
||||
pluginInfo.setActions(actions);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
assertThat(result.getRequestHeaders()).containsEntry("existing-header", "existing-value");
|
||||
assertThat(result.getRequestHeaders()).containsEntry("X-Custom-Header", "custom-value");
|
||||
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_QueryFilter_Match() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
|
||||
TransformerTag filter = new TransformerTag();
|
||||
filter.setTagPosition(Position.QUERY);
|
||||
filter.setTagField("userId");
|
||||
filter.setTagValue("123");
|
||||
|
||||
List<TransformerTag> filters = new ArrayList<>();
|
||||
filters.add(filter);
|
||||
pluginInfo.setFilters(filters);
|
||||
|
||||
TransformerAction action = new TransformerAction();
|
||||
action.setTagPosition(Position.TSF_TAG);
|
||||
action.setTagName("matched-tag");
|
||||
action.setTagValue("matched-value");
|
||||
action.setWeight(100);
|
||||
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
actions.add(action);
|
||||
pluginInfo.setActions(actions);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_QueryFilter_NotMatch() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
|
||||
TransformerTag filter = new TransformerTag();
|
||||
filter.setTagPosition(Position.QUERY);
|
||||
filter.setTagField("userId");
|
||||
filter.setTagValue("999");
|
||||
|
||||
List<TransformerTag> filters = new ArrayList<>();
|
||||
filters.add(filter);
|
||||
pluginInfo.setFilters(filters);
|
||||
|
||||
TransformerAction action = new TransformerAction();
|
||||
action.setTagPosition(Position.TSF_TAG);
|
||||
action.setTagName("matched-tag");
|
||||
action.setTagValue("matched-value");
|
||||
action.setWeight(100);
|
||||
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
actions.add(action);
|
||||
pluginInfo.setActions(actions);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_QueryFilter_NullQueryValue() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
|
||||
TransformerTag filter = new TransformerTag();
|
||||
filter.setTagPosition(Position.QUERY);
|
||||
filter.setTagField("nonExistentParam");
|
||||
filter.setTagValue("test");
|
||||
|
||||
List<TransformerTag> filters = new ArrayList<>();
|
||||
filters.add(filter);
|
||||
pluginInfo.setFilters(filters);
|
||||
|
||||
TransformerAction action = new TransformerAction();
|
||||
action.setTagPosition(Position.TSF_TAG);
|
||||
action.setTagName("matched-tag");
|
||||
action.setTagValue("matched-value");
|
||||
action.setWeight(100);
|
||||
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
actions.add(action);
|
||||
pluginInfo.setActions(actions);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_CookieFilter_Match() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
|
||||
TransformerTag filter = new TransformerTag();
|
||||
filter.setTagPosition(Position.COOKIE);
|
||||
filter.setTagField("sessionId");
|
||||
filter.setTagValue("session123");
|
||||
|
||||
List<TransformerTag> filters = new ArrayList<>();
|
||||
filters.add(filter);
|
||||
pluginInfo.setFilters(filters);
|
||||
|
||||
TransformerAction action = new TransformerAction();
|
||||
action.setTagPosition(Position.TSF_TAG);
|
||||
action.setTagName("session-tag");
|
||||
action.setTagValue("session-value");
|
||||
action.setWeight(100);
|
||||
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
actions.add(action);
|
||||
pluginInfo.setActions(actions);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_HeaderFilter_Match() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
|
||||
TransformerTag filter = new TransformerTag();
|
||||
filter.setTagPosition(Position.HEADER);
|
||||
filter.setTagField("x-user-id");
|
||||
filter.setTagValue("user123");
|
||||
|
||||
List<TransformerTag> filters = new ArrayList<>();
|
||||
filters.add(filter);
|
||||
pluginInfo.setFilters(filters);
|
||||
|
||||
TransformerAction action = new TransformerAction();
|
||||
action.setTagPosition(Position.TSF_TAG);
|
||||
action.setTagName("user-tag");
|
||||
action.setTagValue("user-value");
|
||||
action.setWeight(100);
|
||||
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
actions.add(action);
|
||||
pluginInfo.setActions(actions);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_PathFilter_Match() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
|
||||
TransformerTag filter = new TransformerTag();
|
||||
filter.setTagPosition(Position.PATH);
|
||||
filter.setTagField("/api/v1/users/{userId}");
|
||||
filter.setTagValue("123");
|
||||
|
||||
List<TransformerTag> filters = new ArrayList<>();
|
||||
filters.add(filter);
|
||||
pluginInfo.setFilters(filters);
|
||||
|
||||
TransformerAction action = new TransformerAction();
|
||||
action.setTagPosition(Position.TSF_TAG);
|
||||
action.setTagName("path-tag");
|
||||
action.setTagValue("path-value");
|
||||
action.setWeight(100);
|
||||
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
actions.add(action);
|
||||
pluginInfo.setActions(actions);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_PathFilter_NotMatch() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
|
||||
// create filter with not match path
|
||||
TransformerTag filter = new TransformerTag();
|
||||
filter.setTagPosition(Position.PATH);
|
||||
filter.setTagField("/api/v2/products/{productId}");
|
||||
filter.setTagValue("123");
|
||||
|
||||
List<TransformerTag> filters = new ArrayList<>();
|
||||
filters.add(filter);
|
||||
pluginInfo.setFilters(filters);
|
||||
|
||||
TransformerAction action = new TransformerAction();
|
||||
action.setTagPosition(Position.TSF_TAG);
|
||||
action.setTagName("path-tag");
|
||||
action.setTagValue("path-value");
|
||||
action.setWeight(100);
|
||||
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
actions.add(action);
|
||||
pluginInfo.setActions(actions);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_PathFilter_EmptyPath() throws Exception {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
// set empty path
|
||||
tsfGatewayRequest.setUri(new URI("http://localhost:8080"));
|
||||
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
|
||||
TransformerTag filter = new TransformerTag();
|
||||
filter.setTagPosition(Position.PATH);
|
||||
filter.setTagField("/api/v1/users/{userId}");
|
||||
filter.setTagValue("123");
|
||||
|
||||
List<TransformerTag> filters = new ArrayList<>();
|
||||
filters.add(filter);
|
||||
pluginInfo.setFilters(filters);
|
||||
|
||||
TransformerAction action = new TransformerAction();
|
||||
action.setTagPosition(Position.TSF_TAG);
|
||||
action.setTagName("path-tag");
|
||||
action.setTagValue("path-value");
|
||||
action.setWeight(100);
|
||||
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
actions.add(action);
|
||||
pluginInfo.setActions(actions);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_PathFilter_PathWithoutLeadingSlash() throws Exception {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
|
||||
tsfGatewayRequest.setUri(new URI("http://localhost:8080/api/v1/users/123"));
|
||||
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
|
||||
TransformerTag filter = new TransformerTag();
|
||||
filter.setTagPosition(Position.PATH);
|
||||
filter.setTagField("/api/v1/users/{userId}");
|
||||
filter.setTagValue("123");
|
||||
|
||||
List<TransformerTag> filters = new ArrayList<>();
|
||||
filters.add(filter);
|
||||
pluginInfo.setFilters(filters);
|
||||
|
||||
TransformerAction action = new TransformerAction();
|
||||
action.setTagPosition(Position.TSF_TAG);
|
||||
action.setTagName("path-tag");
|
||||
action.setTagValue("path-value");
|
||||
action.setWeight(100);
|
||||
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
actions.add(action);
|
||||
pluginInfo.setActions(actions);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_MultipleFilters_AllMatch() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
|
||||
TransformerTag queryFilter = new TransformerTag();
|
||||
queryFilter.setTagPosition(Position.QUERY);
|
||||
queryFilter.setTagField("userId");
|
||||
queryFilter.setTagValue("123");
|
||||
|
||||
TransformerTag headerFilter = new TransformerTag();
|
||||
headerFilter.setTagPosition(Position.HEADER);
|
||||
headerFilter.setTagField("x-user-id");
|
||||
headerFilter.setTagValue("user123");
|
||||
|
||||
List<TransformerTag> filters = new ArrayList<>();
|
||||
filters.add(queryFilter);
|
||||
filters.add(headerFilter);
|
||||
pluginInfo.setFilters(filters);
|
||||
|
||||
TransformerAction action = new TransformerAction();
|
||||
action.setTagPosition(Position.TSF_TAG);
|
||||
action.setTagName("multi-tag");
|
||||
action.setTagValue("multi-value");
|
||||
action.setWeight(100);
|
||||
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
actions.add(action);
|
||||
pluginInfo.setActions(actions);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_MultipleFilters_OneNotMatch() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
|
||||
TransformerTag queryFilter = new TransformerTag();
|
||||
queryFilter.setTagPosition(Position.QUERY);
|
||||
queryFilter.setTagField("userId");
|
||||
queryFilter.setTagValue("123");
|
||||
|
||||
TransformerTag headerFilter = new TransformerTag();
|
||||
headerFilter.setTagPosition(Position.HEADER);
|
||||
headerFilter.setTagField("x-user-id");
|
||||
headerFilter.setTagValue("user999");
|
||||
|
||||
List<TransformerTag> filters = new ArrayList<>();
|
||||
filters.add(queryFilter);
|
||||
filters.add(headerFilter);
|
||||
pluginInfo.setFilters(filters);
|
||||
|
||||
TransformerAction action = new TransformerAction();
|
||||
action.setTagPosition(Position.TSF_TAG);
|
||||
action.setTagName("multi-tag");
|
||||
action.setTagValue("multi-value");
|
||||
action.setWeight(100);
|
||||
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
actions.add(action);
|
||||
pluginInfo.setActions(actions);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_DefaultActionPosition() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
|
||||
// create action with default position (not TSF_TAG or HEADER)
|
||||
TransformerAction action = new TransformerAction();
|
||||
action.setTagPosition(Position.QUERY); // 使用一个不在switch中处理的Position
|
||||
action.setTagName("test-tag");
|
||||
action.setTagValue("test-value");
|
||||
action.setWeight(100);
|
||||
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
actions.add(action);
|
||||
pluginInfo.setActions(actions);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRequestTransformer_DefaultFilterPosition() {
|
||||
try (MockedStatic<TsfContext> mockedTsfContext = Mockito.mockStatic(TsfContext.class)) {
|
||||
RequestTransformerPluginInfo pluginInfo = new RequestTransformerPluginInfo();
|
||||
|
||||
// create filter with default position (not in switch cases)
|
||||
TransformerTag filter = new TransformerTag();
|
||||
filter.setTagPosition(Position.TSF_TAG); // 使用一个不在switch中处理的Position
|
||||
filter.setTagField("test-field");
|
||||
filter.setTagValue("test-value");
|
||||
|
||||
List<TransformerTag> filters = new ArrayList<>();
|
||||
filters.add(filter);
|
||||
pluginInfo.setFilters(filters);
|
||||
|
||||
TransformerAction action = new TransformerAction();
|
||||
action.setTagPosition(Position.TSF_TAG);
|
||||
action.setTagName("test-tag");
|
||||
action.setTagValue("test-value");
|
||||
action.setWeight(100);
|
||||
|
||||
List<TransformerAction> actions = new ArrayList<>();
|
||||
actions.add(action);
|
||||
pluginInfo.setActions(actions);
|
||||
|
||||
PluginPayload result = PluginUtil.doRequestTransformer(pluginInfo, tsfGatewayRequest, pluginPayload);
|
||||
|
||||
assertThat(result).isSameAs(pluginPayload);
|
||||
mockedTsfContext.verify(() -> TsfContext.putTags(anyMap(), eq(Tag.ControlFlag.TRANSITIVE)));
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,181 @@
|
||||
/*
|
||||
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
|
||||
*
|
||||
* Copyright (C) 2021 Tencent. All rights reserved.
|
||||
*
|
||||
* Licensed under the BSD 3-Clause License (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* 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 com.tencent.tsf.gateway.core.util;
|
||||
|
||||
import com.tencent.tsf.gateway.core.constant.TsfAlgType;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import shade.polaris.org.apache.commons.codec.binary.Base64;
|
||||
import shade.polaris.org.apache.commons.codec.digest.HmacUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
/**
|
||||
* Test for {@link TsfSignUtil}.
|
||||
*
|
||||
* @author Haotian Zhang
|
||||
*/
|
||||
public class TsfSignUtilTest {
|
||||
|
||||
private static final String TEST_NONCE = "test-nonce";
|
||||
private static final String TEST_SECRET_ID = "test-secret-id";
|
||||
private static final String TEST_SECRET_KEY = "test-secret-key";
|
||||
|
||||
@Test
|
||||
public void testGenerateWithHmacMd5() {
|
||||
// Given
|
||||
String expectedDigestValue = TEST_NONCE + TEST_SECRET_ID + TEST_SECRET_KEY;
|
||||
byte[] expectedBytes = HmacUtils.hmacMd5(TEST_SECRET_KEY, expectedDigestValue);
|
||||
String expectedSignature = Base64.encodeBase64String(expectedBytes);
|
||||
|
||||
// When
|
||||
String actualSignature = TsfSignUtil.generate(TEST_NONCE, TEST_SECRET_ID, TEST_SECRET_KEY, TsfAlgType.HMAC_MD5);
|
||||
|
||||
// Then
|
||||
assertThat(actualSignature).isEqualTo(expectedSignature);
|
||||
assertThat(actualSignature).isNotEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenerateWithHmacSha1() {
|
||||
// Given
|
||||
String expectedDigestValue = TEST_NONCE + TEST_SECRET_ID + TEST_SECRET_KEY;
|
||||
byte[] expectedBytes = HmacUtils.hmacSha1(TEST_SECRET_KEY, expectedDigestValue);
|
||||
String expectedSignature = Base64.encodeBase64String(expectedBytes);
|
||||
|
||||
// When
|
||||
String actualSignature = TsfSignUtil.generate(TEST_NONCE, TEST_SECRET_ID, TEST_SECRET_KEY, TsfAlgType.HMAC_SHA_1);
|
||||
|
||||
// Then
|
||||
assertThat(actualSignature).isEqualTo(expectedSignature);
|
||||
assertThat(actualSignature).isNotEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenerateWithHmacSha256() {
|
||||
// Given
|
||||
String expectedDigestValue = TEST_NONCE + TEST_SECRET_ID + TEST_SECRET_KEY;
|
||||
byte[] expectedBytes = HmacUtils.hmacSha256(TEST_SECRET_KEY, expectedDigestValue);
|
||||
String expectedSignature = Base64.encodeBase64String(expectedBytes);
|
||||
|
||||
// When
|
||||
String actualSignature = TsfSignUtil.generate(TEST_NONCE, TEST_SECRET_ID, TEST_SECRET_KEY, TsfAlgType.HMAC_SHA_256);
|
||||
|
||||
// Then
|
||||
assertThat(actualSignature).isEqualTo(expectedSignature);
|
||||
assertThat(actualSignature).isNotEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenerateWithHmacSha512() {
|
||||
// Given
|
||||
String expectedDigestValue = TEST_NONCE + TEST_SECRET_ID + TEST_SECRET_KEY;
|
||||
byte[] expectedBytes = HmacUtils.hmacSha512(TEST_SECRET_KEY, expectedDigestValue);
|
||||
String expectedSignature = Base64.encodeBase64String(expectedBytes);
|
||||
|
||||
// When
|
||||
String actualSignature = TsfSignUtil.generate(TEST_NONCE, TEST_SECRET_ID, TEST_SECRET_KEY, TsfAlgType.HMAC_SHA_512);
|
||||
|
||||
// Then
|
||||
assertThat(actualSignature).isEqualTo(expectedSignature);
|
||||
assertThat(actualSignature).isNotEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenerateWithUnsupportedAlgorithm() {
|
||||
// When & Then
|
||||
assertThatThrownBy(() -> TsfSignUtil.generate(TEST_NONCE, TEST_SECRET_ID, TEST_SECRET_KEY, TsfAlgType.HMAC_SM3))
|
||||
.isInstanceOf(UnsupportedOperationException.class)
|
||||
.hasMessage("不支持的鉴权算法: HMAC_SM3");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenerateWithEmptyParameters() {
|
||||
// Given
|
||||
String emptyNonce = "";
|
||||
String emptySecretId = "";
|
||||
String emptySecretKey = "";
|
||||
|
||||
// When & Then
|
||||
assertThatThrownBy(() -> TsfSignUtil.generate(emptyNonce, emptySecretId, emptySecretKey, TsfAlgType.HMAC_MD5))
|
||||
.isInstanceOf(IllegalArgumentException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenerateConsistency() {
|
||||
// Given - Same input should produce same output
|
||||
String nonce = "consistent-nonce";
|
||||
String secretId = "consistent-secret-id";
|
||||
String secretKey = "consistent-secret-key";
|
||||
|
||||
// When
|
||||
String signature1 = TsfSignUtil.generate(nonce, secretId, secretKey, TsfAlgType.HMAC_SHA_256);
|
||||
String signature2 = TsfSignUtil.generate(nonce, secretId, secretKey, TsfAlgType.HMAC_SHA_256);
|
||||
|
||||
// Then
|
||||
assertThat(signature1).isEqualTo(signature2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenerateDifferentAlgorithmsProduceDifferentResults() {
|
||||
// When
|
||||
String md5Signature = TsfSignUtil.generate(TEST_NONCE, TEST_SECRET_ID, TEST_SECRET_KEY, TsfAlgType.HMAC_MD5);
|
||||
String sha1Signature = TsfSignUtil.generate(TEST_NONCE, TEST_SECRET_ID, TEST_SECRET_KEY, TsfAlgType.HMAC_SHA_1);
|
||||
String sha256Signature = TsfSignUtil.generate(TEST_NONCE, TEST_SECRET_ID, TEST_SECRET_KEY, TsfAlgType.HMAC_SHA_256);
|
||||
String sha512Signature = TsfSignUtil.generate(TEST_NONCE, TEST_SECRET_ID, TEST_SECRET_KEY, TsfAlgType.HMAC_SHA_512);
|
||||
|
||||
// Then - Different algorithms should produce different signatures
|
||||
assertThat(md5Signature).isNotEqualTo(sha1Signature);
|
||||
assertThat(md5Signature).isNotEqualTo(sha256Signature);
|
||||
assertThat(md5Signature).isNotEqualTo(sha512Signature);
|
||||
assertThat(sha1Signature).isNotEqualTo(sha256Signature);
|
||||
assertThat(sha1Signature).isNotEqualTo(sha512Signature);
|
||||
assertThat(sha256Signature).isNotEqualTo(sha512Signature);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenerateWithSpecialCharacters() {
|
||||
// Given
|
||||
String specialNonce = "test-nonce-with-special-chars!@#$%^&*()";
|
||||
String specialSecretId = "special-chars-secret-id-with-symbols";
|
||||
String specialSecretKey = "secret-key-with-special-characters";
|
||||
|
||||
// When
|
||||
String signature = TsfSignUtil.generate(specialNonce, specialSecretId, specialSecretKey, TsfAlgType.HMAC_SHA_256);
|
||||
|
||||
// Then
|
||||
assertThat(signature).isNotNull();
|
||||
assertThat(signature).isNotEmpty();
|
||||
|
||||
// Verify signature result with special characters
|
||||
String expectedDigestValue = specialNonce + specialSecretId + specialSecretKey;
|
||||
byte[] expectedBytes = HmacUtils.hmacSha256(specialSecretKey, expectedDigestValue);
|
||||
String expectedSignature = Base64.encodeBase64String(expectedBytes);
|
||||
assertThat(signature).isEqualTo(expectedSignature);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenerateSignatureFormat() {
|
||||
// When
|
||||
String signature = TsfSignUtil.generate(TEST_NONCE, TEST_SECRET_ID, TEST_SECRET_KEY, TsfAlgType.HMAC_SHA_256);
|
||||
|
||||
// Then - Verify Base64 encoding format
|
||||
assertThat(signature).matches("^[A-Za-z0-9+/]*={0,2}$"); // Base64 format regex
|
||||
assertThat(Base64.isBase64(signature)).isTrue();
|
||||
}
|
||||
}
|
Loading…
Reference in new issue