From 4697d99d4482e01bd030c289b449547b9cfac313 Mon Sep 17 00:00:00 2001 From: 13009 Date: Wed, 21 Feb 2024 13:04:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95=E8=A6=86?= =?UTF-8?q?=E7=9B=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../czcb/scfs/api/core/AbstractProfile.java | 2 +- .../java/com/czcb/scfs/api/core/Profile.java | 2 +- .../api/core/cipher/DefaultValidator.java | 2 +- .../scfs/api/core/http/AbstractApiClient.java | 10 +- .../core/http/AbstractApiClientBuilder.java | 22 --- ...ientBuilder.java => ApiClientBuilder.java} | 40 ++--- .../scfs/api/core/DefaultChannelTest.java | 15 +- .../java/com/czcb/scfs/api/core/KeyText.java | 55 +++++++ .../core/cipher/CertificateValidityTest.java | 50 ++++++ .../core/cipher/DefaultCredentialTest.java | 22 +-- .../api/core/cipher/DefaultValidatorTest.java | 14 +- .../cipher/LocalCertificateProviderTest.java | 28 ++-- .../exception/ApiClientExceptionTest.java | 8 +- .../core/exception/EncodingExceptionTest.java | 5 +- .../core/exception/EncryptExceptionTest.java | 5 +- .../core/exception/FileReadExceptionTest.java | 27 ++++ .../api/core/exception/SignExceptionTest.java | 5 +- .../exception/TimestampExceptionTest.java | 5 +- .../exception/ValidationExceptionTest.java | 5 +- .../api/core/http/ApiClientBuilderTest.java | 151 ++++++++++++++++++ .../http/DefaultApiClientBuilderTest.java | 20 --- .../client/ApacheHttpclientProxyTest.java | 6 +- .../http/client/ApacheHttpclientTest.java | 2 +- ...ava => ApacheHttpclientTestProxyTest.java} | 7 +- .../http/client/ApacheHttpclientV2Test.java | 9 +- .../http/client/ApacheHttpclientV3Test.java | 12 +- .../http/client/TestPrivacyDecryptor.java | 2 +- .../http/client/TestPrivacyEncryptor.java | 2 +- .../czcb/scfs/api/core/util/StringsTest.java | 2 +- .../api/service/file/FileDownloadService.java | 39 ++--- .../api/service/file/FileUploadService.java | 54 +++---- .../czcb/scfs/api/service/MockResponse.java | 4 +- .../scfs/api/service/sms/SmsServiceTest.java | 9 +- .../boot/starter/ScfsAutoConfiguration.java | 10 +- .../spring/boot/starter/SmConfiguration.java | 2 +- 35 files changed, 449 insertions(+), 204 deletions(-) delete mode 100644 scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/AbstractApiClientBuilder.java rename scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/{DefaultApiClientBuilder.java => ApiClientBuilder.java} (80%) create mode 100644 scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/FileReadExceptionTest.java create mode 100644 scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/ApiClientBuilderTest.java delete mode 100644 scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/DefaultApiClientBuilderTest.java rename scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/{ApacheHttpclientTestProxy.java => ApacheHttpclientTestProxyTest.java} (95%) diff --git a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/AbstractProfile.java b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/AbstractProfile.java index 2824651..8983222 100644 --- a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/AbstractProfile.java +++ b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/AbstractProfile.java @@ -40,7 +40,7 @@ public abstract class AbstractProfile implements Profile { } @Override - public HttpProfile getHttpclientProfile() { + public HttpProfile getHttpProfile() { return httpProfile; } } diff --git a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/Profile.java b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/Profile.java index 12f3c8c..92ded99 100644 --- a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/Profile.java +++ b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/Profile.java @@ -37,5 +37,5 @@ public interface Profile { * * @return HttpclientProfile */ - HttpProfile getHttpclientProfile(); + HttpProfile getHttpProfile(); } diff --git a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/cipher/DefaultValidator.java b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/cipher/DefaultValidator.java index c41809b..afc3a1c 100644 --- a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/cipher/DefaultValidator.java +++ b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/cipher/DefaultValidator.java @@ -29,7 +29,7 @@ public final class DefaultValidator implements Validator { public DefaultValidator(Profile profile) { this.profile = profile; this.verifier = profile.getSignature().getVerifier(); - this.httpLogger = new HttpLogger(profile.getHttpclientProfile().logEnabled()); + this.httpLogger = new HttpLogger(profile.getHttpProfile() == null || profile.getHttpProfile().logEnabled()); } private boolean isInvalidHttpCode(int httpCode) { diff --git a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/AbstractApiClient.java b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/AbstractApiClient.java index ffa6bb0..d74a63a 100644 --- a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/AbstractApiClient.java +++ b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/AbstractApiClient.java @@ -35,7 +35,7 @@ public abstract class AbstractApiClient implements ApiClient { this.privacy = profile.getPrivacy(); this.signature = profile.getSignature(); this.validator = new DefaultValidator(profile); - this.httpLogger = new HttpLogger(profile.getHttpclientProfile().logEnabled()); + this.httpLogger = new HttpLogger(profile.getHttpProfile() == null || profile.getHttpProfile().logEnabled()); } @Override @@ -99,8 +99,8 @@ public abstract class AbstractApiClient implements ApiClient { .addHeader(AUTHORIZATION, getAuthorization(request)) .addHeader(USER_AGENT, getUserAgent()) .addHeaders(request.getHttpHeaders().getHeaders()) - .addHeaders(getProfile().getHttpclientProfile().getHeaders()) - .compression(getProfile().getHttpclientProfile().compressionEnabled()) + .addHeaders(getProfile().getHttpProfile().getHeaders()) + .compression(getProfile().getHttpProfile().compressionEnabled()) .parameters(request.getParameters()) .body(request.getRequestBody()); if (Objects.equals(HttpMethod.POST, request.getHttpMethod())) { @@ -111,10 +111,10 @@ public abstract class AbstractApiClient implements ApiClient { private String fullUrlPattern(HttpRequest request) { // 拼接完整URL - if (getProfile().getHttpclientProfile().online()) { + if (getProfile().getHttpProfile().online()) { return Host.ONLINE_GATEWAY.address(request.getUrl()); } else { - return getProfile().getHttpclientProfile().getHost() + request.getUrl(); + return getProfile().getHttpProfile().getHost() + request.getUrl(); } } diff --git a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/AbstractApiClientBuilder.java b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/AbstractApiClientBuilder.java deleted file mode 100644 index c889591..0000000 --- a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/AbstractApiClientBuilder.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.czcb.scfs.api.core.http; - -/** - * @author wangwei - * @since 2.0.0 - */ -public interface AbstractApiClientBuilder> { - - /** - * 复制工厂,复制一个当前对象 - * - * @return 对象的副本 - */ - T newInstance(); - - /** - * 构建 AbstractHttpClient - * - * @return AbstractHttpClient - */ - AbstractApiClient build(); -} diff --git a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/DefaultApiClientBuilder.java b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/ApiClientBuilder.java similarity index 80% rename from scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/DefaultApiClientBuilder.java rename to scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/ApiClientBuilder.java index eead72a..9c60c60 100644 --- a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/DefaultApiClientBuilder.java +++ b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/ApiClientBuilder.java @@ -1,5 +1,6 @@ package com.czcb.scfs.api.core.http; +import com.czcb.scfs.api.core.ApiClient; import com.czcb.scfs.api.core.Profile; import com.czcb.scfs.api.core.http.client.ApacheHttpclient; import org.apache.hc.client5.http.classic.HttpClient; @@ -23,29 +24,28 @@ import static java.util.Objects.requireNonNull; * * @since 2.0.0 */ -public class DefaultApiClientBuilder implements AbstractApiClientBuilder { +public final class ApiClientBuilder { private Profile profile; private HttpClient httpClient; - /** - * 复制工厂,复制一个当前对象 - * - * @return 对象的副本 - */ - @Override - public DefaultApiClientBuilder newInstance() { - DefaultApiClientBuilder result = new DefaultApiClientBuilder(); - result.profile = profile; - result.httpClient = httpClient; - return result; + private ApiClientBuilder() { } - public DefaultApiClientBuilder profile(Profile profile) { - this.profile = requireNonNull(profile); + /** + * 创建DefaultApiClientBuilder对象 + * + * @return DefaultApiClientBuilder + */ + public static ApiClientBuilder custom() { + return new ApiClientBuilder(); + } + + public ApiClientBuilder profile(Profile profile) { + this.profile = profile; return this; } - public DefaultApiClientBuilder httpClient(HttpClient httpClient) { + public ApiClientBuilder httpClient(HttpClient httpClient) { this.httpClient = httpClient; return this; } @@ -55,14 +55,18 @@ public class DefaultApiClientBuilder implements AbstractApiClientBuilder { - new DefaultChannel.Builder() - .channelNo("0000") - .build(); - }); - - Assertions.assertThrows(NullPointerException.class, () -> { - new DefaultChannel.Builder() - .appNo("0000") - .build(); - }); + DefaultChannel.Builder builder2 = new DefaultChannel.Builder().appNo("0000"); + Assertions.assertThrows(NullPointerException.class, builder2::build); } } \ No newline at end of file diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/KeyText.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/KeyText.java index 5caff16..cacee91 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/KeyText.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/KeyText.java @@ -70,4 +70,59 @@ public final class KeyText { public static X509Certificate loadTestRSA() { return PemFile.loadX509FromString(CERTIFICATE_TEXT_RSA); } + + + public static final String PRIVATE_RSA_2 = "-----BEGIN PRIVATE KEY-----\n" + + "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC5CDjdTuMXkccn9l1PcM84TWTi\n" + + "h4BWFPlm9KUwYd8uWFqw8P46cwHbtBKj0yWRfW5GYi4TfVkdPCV1xDalYP+YZT4MREbgpLi8VmKX\n" + + "LyYX5lD4PPqOBpOniR/1l9sh9otN1xd6zpzxs9hXx4YxGowzKvkowyuFw0mksqWzfbP/C1cAbGpu\n" + + "HmrIN7MCiKArdGCYbgxESJ3Udz67jktQwlCtqXrkHDWdkAlnk6Ktt3HOfIIDoQcOY3iaVzfxVgsr\n" + + "jEapAJEhjn3wPjZYCud2a8NOG0AHdRDvbuWwCJz6fZyNLZJwjmJLClQQ/ouG0TGyTwQWCWvzY6v/\n" + + "owpRRgbJ3Tb1AgMBAAECggEAAN+ykQz90o8sLxqhPy5LtDrdVpqINx/bO6q9GvjjWm8tYneI49LG\n" + + "N/jmO6LUIxdCDZAKIqptYM93Z9J45ZgLLPeRbvJlmUr92lnYFlmxJty+FiYHkuMiEGD75yeD7+mf\n" + + "p8rzv+8424VbaLK3BgVXkyhJS/F8A6Iz91Smpq3Zy0MK47FX7DWgITYJvcT/Tmbpw32AHJWOgNSY\n" + + "C49CL+gQC4yTK2nCTqcnLPmMRQvuCofmGnOKWjJ6U56CoS8+BDAp964zBi81VrD5IMiq1mXDEHC7\n" + + "wkvdOooJLUKhtp0gOEdAvghrILPlvgtQTpiRLn+fFEqv6huulAEl0w5e7/qzkQKBgQDlIC17Ckmh\n" + + "VE9LsxZxHqObwEraOogjjzYf0WoXXgb0vb+bl4B2+7ZntrMdV9/Tyi99LAqwKTT1TgCEG0r2uiRz\n" + + "00zU6QA+akc3YkZPK9RxOtWLQayDtNamrJKxbbQehxfpoiZOf70DTpdmp5hdDRswGTWAWuKXNnba\n" + + "i7Z5lPsxTQKBgQDOvBKWbbeOcodBAek6tpyFpeCGv/9EmYrW046zMPlvSFF/XGITfKliuPamwZ54\n" + + "0/Z4xAfR8VDRy9ps9FcCt5A5h2Y6dL6d5nt84um3QWkIStuq0oCR26sXerouWGWLwDa6WnlQfR3M\n" + + "4PXy55j2gPifiTipLiML8lfAxCiT8pjISQKBgGo2XF7pCfDLUGbbAdA2T8lnfktjTrCNNp3RScjD\n" + + "QZ46R5QsytRdItU5EBbOIWfgFduEiv/WWkJMgli6/ikZaMR4culPiVllktXNrKIOw1Ap4cvICdyT\n" + + "+90PqoCtRg3QufkHvZIuDMR3rh9cGXkpFi1Zwj9Z4igOi1IL6e66bScRAoGBAIwAdZ4Fw07mZI4z\n" + + "mxy12h3wDbNzho2QZaPCNVtIiUNBeF+F0q1buOIwXGjlqkotUTbLmngkshTBtrQebGZcpYEwHpzr\n" + + "vsLz+SDEEn6V/2ksOMLgN02Ps7f81uTX3Dzd+LIO3yUQ9gNvPWA4UzBsevKfXQ3FPtqyTZcvwEMh\n" + + "ATJxAoGATiwjlqy8spHJrfO5UuaUeUJuT8yAseeCltjh7sA4vzFDC+PIAqyA2Zvl1AG0XWQv6nN9\n" + + "NAczDbqj4uiQ+0Z852s6NqiJfWuicAm3D9440vUcAKKews7s1HcjYHD7/So1b3bAL8Q9+5VRvO96\n" + + "jvEdHwqZ9aas/Bp53njG+V7CU4o=\n" + + "-----END PRIVATE KEY-----"; + + public static final String CERTIFICATE_RSA_2 = "-----BEGIN CERTIFICATE-----\n" + + "MIIDtTCCAp2gAwIBAgIhAJyeRXbDplanspYB9xwLbzeIAiXxZzCmX6PNFBhBiWVPMA0GCSqGSIb3\n" + + "DQEBCwUAMIGNMQswCQYDVQQGEwJDTjESMBAGA1UECAwJ5rWZ5rGf55yBMRIwEAYDVQQHDAnmna3l\n" + + "t57luIIxITAfBgNVBAoMGOa1meaxn+eooOW3nuWVhuS4mumTtuihjDEYMBYGA1UECwwP5pWw5a2X\n" + + "6YeR6J6N6YOoMRkwFwYDVQQDDBBzY2ZzLmN6Y2IuY29tLmNuMB4XDTI0MDIyMDEwMzY0MVoXDTI5\n" + + "MDIyMDEwMzY0MVowgY0xCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnmtZnmsZ/nnIExEjAQBgNVBAcM\n" + + "CeadreW3nuW4gjEhMB8GA1UECgwY5rWZ5rGf56ig5bee5ZWG5Lia6ZO26KGMMRgwFgYDVQQLDA/m\n" + + "lbDlrZfph5Hono3pg6gxGTAXBgNVBAMMEHNjZnMuY3pjYi5jb20uY24wggEiMA0GCSqGSIb3DQEB\n" + + "AQUAA4IBDwAwggEKAoIBAQC5CDjdTuMXkccn9l1PcM84TWTih4BWFPlm9KUwYd8uWFqw8P46cwHb\n" + + "tBKj0yWRfW5GYi4TfVkdPCV1xDalYP+YZT4MREbgpLi8VmKXLyYX5lD4PPqOBpOniR/1l9sh9otN\n" + + "1xd6zpzxs9hXx4YxGowzKvkowyuFw0mksqWzfbP/C1cAbGpuHmrIN7MCiKArdGCYbgxESJ3Udz67\n" + + "jktQwlCtqXrkHDWdkAlnk6Ktt3HOfIIDoQcOY3iaVzfxVgsrjEapAJEhjn3wPjZYCud2a8NOG0AH\n" + + "dRDvbuWwCJz6fZyNLZJwjmJLClQQ/ouG0TGyTwQWCWvzY6v/owpRRgbJ3Tb1AgMBAAEwDQYJKoZI\n" + + "hvcNAQELBQADggEBAE4aQDkoMFIzIAWtJkvtmx2yLcEp7RRsnZEQPOpfyYauUGrzgU9VBj2lnEr3\n" + + "NGcW1JWrige6um5Wy3QWgba0EuM+n69w6CUxwEobZSnWZKMkTuaSa5WKR60/MsxiB5P0B9FfUFEd\n" + + "lkPc2vLSBKtLQcAp0SPxawvNtbnSFJAbyxOuQ5zczMcG0erq2t6AIA/nOYNkZedQXbE4vsmt9A29\n" + + "mRFOOOJEklUa9JKq/03FxDEDCAZsbVrByaio3u6CqO3+zNwm2Uhf8piUkcF45MNjWJAcehDjcrc4\n" + + "ZPZc8varEGWYvhF+K+hl70kdaBz7hwOX6dg3e2/yuOEzkD3LeTwpA4M=\n" + + "-----END CERTIFICATE-----"; + + public static PrivateKey loadTestPrivateKeyRSA2() { + return PemFile.loadPrivateKeyFromString(PRIVATE_RSA_2); + } + + public static X509Certificate loadTestRSA2() { + return PemFile.loadX509FromString(CERTIFICATE_RSA_2); + } + } diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/cipher/CertificateValidityTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/cipher/CertificateValidityTest.java index aa4377b..79acbf6 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/cipher/CertificateValidityTest.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/cipher/CertificateValidityTest.java @@ -1,19 +1,68 @@ package com.czcb.scfs.api.core.cipher; import com.czcb.scfs.api.core.KeyText; +import com.czcb.scfs.api.core.util.PemFile; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import java.math.BigInteger; import java.security.cert.X509Certificate; +import java.util.HashMap; import java.util.concurrent.ConcurrentHashMap; class CertificateValidityTest { +// public static final String PRIVATE_VALIDITY_RSA = "-----BEGIN PRIVATE KEY-----\n" + +// "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDBBz/n4yiesoy2bjJ/OYCa0x0k\n" + +// "EQ196AHQRt/xeDtk2UIbsiTc1GgHDY0gBEyG2atiJOsxbHgI1VwG2zB6gCkXvwd26nS1FAcSjeeZ\n" + +// "zjR+y32NSdVd5fekez0er3q43+hIUhCgLb0nQepLBqX0Gw72Q9Oi41DqWI0V8Dsuhn+TFQKcmTC4\n" + +// "7ub9RAFUvPXfYe76EYDfadymIdgqnGV5GS7HD/ByUBodw3hpRuZVTudCg90S05xTgUB/pmY5GnE9\n" + +// "IzaNbFC2O3fq+vXqdSseDzMnQaSAmUnghBe4LdWG5buhu+b2TxKdbFdy0wG6aiuDoxUCqT9cKQ89\n" + +// "mXLACoFe2DIxAgMBAAECggEAJ7BpKjGZqknNp3wQi3rED/GNGhucgdEowE22YaTGV5XZYy71p+dP\n" + +// "rXWSmSzxHEAY3mD3cA3cv3o5RhqfBO0hpeWMMB4Ema/wxVaisowE3LZUDi9KfRhaGzqQxmSv79/w\n" + +// "F6CyFPFapX4G4d7P1BmVMbsgAqvJOSo0djiTPp1+kTvizPkZbHz+Q6uB2Rw7APf0UXC7tfHCuZHF\n" + +// "h52sFSoHJGsRBcoWsqHNFafhVQGF1qPZ9bCsO+cdzpSKu1KmxT8lIr/Phw8L7nKJeWz990pj4Uso\n" + +// "w9uLRxOT+QysgfUH47DKIAdLl3QkE2KI6pTy6lKNMrUapcoVqVBeYVz7fg3m7QKBgQDumPKaTNfB\n" + +// "4lvA6Lq3sKsHzsnzLXZ9SNXGbksx/s0xcNvaw+07TXBkpfQDyrp+CTdjQYRq8WykhNadwa+oantS\n" + +// "fGwNrWCi6ZCTMi1OVxoirkVaJ1960qv3mHcrpyuhUxjX4QAcaNYMxaYuUVOex+Fahkq8oppP/ktP\n" + +// "PLuiPYsZdQKBgQDPG3FPa8rzEkIRcCm8tXAnjzAbe1Ui/iC1reACKtTrfA12mx2XJSjAMUid6fmj\n" + +// "k8M6qdWL9pHxeIcVBBHK0wcjeANIMLJPWL+/up9xvP2tNdxeRuMXP4a1olNHwKozJIBOU1ocdR4/\n" + +// "tGp5Ad27bfnFhMPlJlDILZzrO3h15CAiTQKBgQCXsQG8e9JIX+M5uDzNgDKcWiomwuasLFxNNd30\n" + +// "wSwvnLMKWLpAk7E7LA8BQihi7PUb05GedDNAPXw8++Dz0A7rmFMSNwJTUO8rxiDrx5DEL8vDz3hy\n" + +// "m/HdDj/lrvicLjqDNXdemIBNynMmy2nAbw+k//AQEcjNxryWeeRI95ux6QKBgDbFly3d4ApwpbBe\n" + +// "7WrOwR51K8/Yyic69gOWPEvWcADnCdh4JVc3qJNLdVzt5+tuxI7bI3KkfuxRZ8gTD3GIZbbnolaR\n" + +// "Klb5rZxTCp/Vz3DjcagtLxmS31lh2Ix9U4W6/YO5X3dvMdS/LflamP1clFW8SuJrQ6ntBjbfv3fO\n" + +// "IQFxAoGAcKzUGRV/GvLZMkeWzZFSLMP1dGZXWKlE/9H5WwhPUU3s27E5Eht4thms+znwv/9cHJDS\n" + +// "Qi7autcRKDCqlfAiGbzKTQ37iB1fV7nysLCrX0Q21YSMLgj2HiMO3Ny9Y+xs4ggKZZO0PDMWtR63\n" + +// "loXsQS7xdfIu8u6qvaJvevRXvpY=\n" + +// "-----END PRIVATE KEY-----"; + + // 过期的证书 + public static final String CERTIFICATE_VALIDITY_RSA = "-----BEGIN CERTIFICATE-----\n" + + "MIIDtTCCAp2gAwIBAgIhAJAkNnDwN9NJKe3CDViZk9d5HAfviux2NWT4SKm/IHNhMA0GCSqGSIb3\n" + + "DQEBCwUAMIGNMQswCQYDVQQGEwJDTjESMBAGA1UECAwJ5rWZ5rGf55yBMRIwEAYDVQQHDAnmna3l\n" + + "t57luIIxITAfBgNVBAoMGOa1meaxn+eooOW3nuWVhuS4mumTtuihjDEYMBYGA1UECwwP5pWw5a2X\n" + + "6YeR6J6N6YOoMRkwFwYDVQQDDBBzY2ZzLmN6Y2IuY29tLmNuMB4XDTI0MDIyMTAzMjIzMFoXDTI0\n" + + "MDIyMTAzMjIzNVowgY0xCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnmtZnmsZ/nnIExEjAQBgNVBAcM\n" + + "CeadreW3nuW4gjEhMB8GA1UECgwY5rWZ5rGf56ig5bee5ZWG5Lia6ZO26KGMMRgwFgYDVQQLDA/m\n" + + "lbDlrZfph5Hono3pg6gxGTAXBgNVBAMMEHNjZnMuY3pjYi5jb20uY24wggEiMA0GCSqGSIb3DQEB\n" + + "AQUAA4IBDwAwggEKAoIBAQDBBz/n4yiesoy2bjJ/OYCa0x0kEQ196AHQRt/xeDtk2UIbsiTc1GgH\n" + + "DY0gBEyG2atiJOsxbHgI1VwG2zB6gCkXvwd26nS1FAcSjeeZzjR+y32NSdVd5fekez0er3q43+hI\n" + + "UhCgLb0nQepLBqX0Gw72Q9Oi41DqWI0V8Dsuhn+TFQKcmTC47ub9RAFUvPXfYe76EYDfadymIdgq\n" + + "nGV5GS7HD/ByUBodw3hpRuZVTudCg90S05xTgUB/pmY5GnE9IzaNbFC2O3fq+vXqdSseDzMnQaSA\n" + + "mUnghBe4LdWG5buhu+b2TxKdbFdy0wG6aiuDoxUCqT9cKQ89mXLACoFe2DIxAgMBAAEwDQYJKoZI\n" + + "hvcNAQELBQADggEBAJU6Wd7aLjG1MRjjDdrnA2YN1/BDAvieoktdL2xbsoWkQFOV/JR1ypVYIW1E\n" + + "vl2dAZj0h3CJi7NA44zwiKi46SD4whMW5ByfRTqO6bMFiITrLh6DazLGbuyXX8aVyr8Rpb+fEebR\n" + + "eYPdH64aynE/ld8AY1nTkDzt++9RjqdOATiZF7HQrNUzXXZ6BL99jfh1nxtTKgajzq4/40V+xhID\n" + + "cvY4EWt4EbK1XvKyX44zwjwfusKu+MxygxB67eVeWedjxjb/8c4PCVbcrDj0sk0AYhCoH0r7t26z\n" + + "lEmLNbE4NGCUOdsKZwU0nHph5IXhjtSlqWmL7fPG0cBmdC0a36eOnXI=\n" + + "-----END CERTIFICATE-----"; + @Test void getLongestCertificate() { CertificateValidity validity = new CertificateValidity(); Assertions.assertNull(validity.getLongestCertificate(null)); + Assertions.assertNull(validity.getLongestCertificate(new HashMap<>())); ConcurrentHashMap certificates = new ConcurrentHashMap<>(); X509Certificate certificate = KeyText.loadTestRSA(); @@ -25,5 +74,6 @@ class CertificateValidityTest { void withinValidity() { CertificateValidity validity = new CertificateValidity(); Assertions.assertTrue(validity.withinValidity(KeyText.loadTestRSA())); + Assertions.assertFalse(validity.withinValidity(PemFile.loadX509FromString(CERTIFICATE_VALIDITY_RSA))); } } \ No newline at end of file diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/cipher/DefaultCredentialTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/cipher/DefaultCredentialTest.java index 0a26335..5035c1f 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/cipher/DefaultCredentialTest.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/cipher/DefaultCredentialTest.java @@ -1,12 +1,12 @@ -package com.czcb.scfs.api.core.cipher; - -class DefaultCredentialTest { - -// @Test -// void buildRequestAuthorization() { -// } +//package com.czcb.scfs.api.core.cipher; // -// @Test -// void buildResponseSignature() { -// } -} \ No newline at end of file +//class DefaultCredentialTest { +// +//// @Test +//// void buildRequestAuthorization() { +//// } +//// +//// @Test +//// void buildResponseSignature() { +//// } +//} \ No newline at end of file diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/cipher/DefaultValidatorTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/cipher/DefaultValidatorTest.java index e84a735..11b52b6 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/cipher/DefaultValidatorTest.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/cipher/DefaultValidatorTest.java @@ -1,8 +1,8 @@ -package com.czcb.scfs.api.core.cipher; - -class DefaultValidatorTest { +//package com.czcb.scfs.api.core.cipher; // -// @Test -// void validate() { -// } -} \ No newline at end of file +//class DefaultValidatorTest { +//// +//// @Test +//// void validate() { +//// } +//} \ No newline at end of file diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/cipher/LocalCertificateProviderTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/cipher/LocalCertificateProviderTest.java index 907fe64..2dbe369 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/cipher/LocalCertificateProviderTest.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/cipher/LocalCertificateProviderTest.java @@ -10,16 +10,16 @@ import java.util.List; class LocalCertificateProviderTest { - @Test - void getCertificate() { - String xx = "38844645436081632637265568516991627875287655057"; - X509Certificate certificate = KeyText.loadTestRSA(); - - List list = new ArrayList<>(); - list.add(certificate); - LocalCertificateProvider provider = new LocalCertificateProvider(list); -// Assertions.assertNotNull(provider.getCertificate(xx)); - } +// @Test +// void getCertificate() { +// String xx = "38844645436081632637265568516991627875287655057"; +// X509Certificate certificate = KeyText.loadTestRSA(); +// +// List list = new ArrayList<>(); +// list.add(certificate); +// LocalCertificateProvider provider = new LocalCertificateProvider(list); +//// Assertions.assertNotNull(provider.getCertificate(xx)); +// } @Test void getAvailableCertificate() { @@ -30,4 +30,12 @@ class LocalCertificateProviderTest { LocalCertificateProvider provider = new LocalCertificateProvider(list); Assertions.assertNotNull(provider.getAvailableCertificate()); } + + @Test + void testGetAvailableCertificate() { + List data = new ArrayList<>(); + Assertions.assertThrows(IllegalArgumentException.class, () -> { + new LocalCertificateProvider(data); + }); + } } \ No newline at end of file diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/ApiClientExceptionTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/ApiClientExceptionTest.java index 260091c..9f06ed4 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/ApiClientExceptionTest.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/ApiClientExceptionTest.java @@ -8,20 +8,20 @@ class ApiClientExceptionTest { @Test void test() { + ApiClientException exception = new ApiClientException(); assertThrows(ApiClientException.class, () -> { - throw new ApiClientException(); + throw exception; }); assertThrows(ApiClientException.class, () -> { throw new ApiClientException("error"); }); - assertThrows(ApiClientException.class, () -> { - throw new ApiClientException("error", new ApiClientException()); + throw new ApiClientException("error", exception); }); assertThrows(ApiClientException.class, () -> { - throw new ApiClientException(new ApiClientException()); + throw new ApiClientException(exception); }); } diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/EncodingExceptionTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/EncodingExceptionTest.java index 7b21abe..74bd910 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/EncodingExceptionTest.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/EncodingExceptionTest.java @@ -15,12 +15,13 @@ class EncodingExceptionTest { throw new EncodingException("error"); }); + EncodingException exception = new EncodingException(); assertThrows(EncodingException.class, () -> { - throw new EncodingException("error", new EncodingException()); + throw new EncodingException("error", exception); }); assertThrows(EncodingException.class, () -> { - throw new EncodingException(new EncodingException()); + throw new EncodingException(exception); }); } } \ No newline at end of file diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/EncryptExceptionTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/EncryptExceptionTest.java index 2495158..187939e 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/EncryptExceptionTest.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/EncryptExceptionTest.java @@ -16,12 +16,13 @@ class EncryptExceptionTest { throw new EncryptException("error"); }); + EncryptException exception = new EncryptException(""); assertThrows(EncryptException.class, () -> { - throw new EncryptException("error", new EncryptException("")); + throw new EncryptException("error", exception); }); assertThrows(EncryptException.class, () -> { - throw new EncryptException(new EncryptException("")); + throw new EncryptException(exception); }); } diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/FileReadExceptionTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/FileReadExceptionTest.java new file mode 100644 index 0000000..ea9bb3a --- /dev/null +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/FileReadExceptionTest.java @@ -0,0 +1,27 @@ +package com.czcb.scfs.api.core.exception; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertThrows; + +class FileReadExceptionTest { + @Test + void test() { + assertThrows(FileReadException.class, () -> { + throw new FileReadException(); + }); + + assertThrows(FileReadException.class, () -> { + throw new FileReadException("error"); + }); + + FileReadException exception = new FileReadException(""); + assertThrows(FileReadException.class, () -> { + throw new FileReadException("error", exception); + }); + + assertThrows(FileReadException.class, () -> { + throw new FileReadException(exception); + }); + } +} \ No newline at end of file diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/SignExceptionTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/SignExceptionTest.java index 618ffe3..966b5ce 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/SignExceptionTest.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/SignExceptionTest.java @@ -15,12 +15,13 @@ class SignExceptionTest { throw new SignException("error"); }); + SignException signException = new SignException(); assertThrows(SignException.class, () -> { - throw new SignException("error", new SignException()); + throw new SignException("error", signException); }); assertThrows(SignException.class, () -> { - throw new SignException(new SignException()); + throw new SignException(signException); }); } } \ No newline at end of file diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/TimestampExceptionTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/TimestampExceptionTest.java index 16e8a5c..97cd3ea 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/TimestampExceptionTest.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/TimestampExceptionTest.java @@ -15,12 +15,13 @@ class TimestampExceptionTest { throw new TimestampException("error"); }); + TimestampException timestampException = new TimestampException(); assertThrows(TimestampException.class, () -> { - throw new TimestampException("error", new TimestampException()); + throw new TimestampException("error", timestampException); }); assertThrows(TimestampException.class, () -> { - throw new TimestampException(new TimestampException()); + throw new TimestampException(timestampException); }); } } \ No newline at end of file diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/ValidationExceptionTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/ValidationExceptionTest.java index 93e1da4..18e8cf7 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/ValidationExceptionTest.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/exception/ValidationExceptionTest.java @@ -15,12 +15,13 @@ class ValidationExceptionTest { throw new ValidationException("error"); }); + ValidationException validationException = new ValidationException(); assertThrows(ValidationException.class, () -> { - throw new ValidationException("error", new ValidationException()); + throw new ValidationException("error", validationException); }); assertThrows(ValidationException.class, () -> { - throw new ValidationException(new ValidationException()); + throw new ValidationException(validationException); }); } } \ No newline at end of file diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/ApiClientBuilderTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/ApiClientBuilderTest.java new file mode 100644 index 0000000..88743e2 --- /dev/null +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/ApiClientBuilderTest.java @@ -0,0 +1,151 @@ +package com.czcb.scfs.api.core.http; + +import com.czcb.scfs.api.core.ApiClient; +import com.czcb.scfs.api.core.DefaultChannel; +import com.czcb.scfs.api.core.KeyText; +import com.czcb.scfs.api.core.Profile; +import com.czcb.scfs.api.core.cipher.*; +import com.czcb.scfs.api.core.http.client.TestPrivacy; +import com.czcb.scfs.api.core.http.client.TestProfile; +import com.czcb.scfs.api.core.http.client.TestSigner; +import com.czcb.scfs.api.core.http.client.TestVerifier; +import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.security.PrivateKey; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.List; + +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; + +class ApiClientBuilderTest { + + Profile buildProfile() { + PrivateKey privateKey = KeyText.loadTestPrivateKeyRSA(); + X509Certificate certificate = KeyText.loadTestRSA(); + List list = new ArrayList<>(); + list.add(certificate); + CertificateProvider certificateProvider = new LocalCertificateProvider(list); + Privacy privacy = new TestPrivacy(privateKey, certificateProvider); + Signature signature = new DefaultSignature(certificateProvider, new TestSigner(privateKey), new TestVerifier(certificateProvider)); + + return new TestProfile( + privacy, + signature, + new DefaultChannel.Builder() + .channelNo("000000") + .appNo("111111") + .build(), + new DefaultHttpProfile.Builder() + .online(false) + .logEnabled(true) + .compressionEnabled(false) + .host("http://127.0.0.1:8888") + .build() + ); + } + + @Test + void profile() { + ApiClient client = ApiClientBuilder.custom() + .profile(buildProfile()) + .build(); + Assertions.assertNotNull(client); + + Profile profile = client.getProfile(); + + Assertions.assertNotNull(profile.getPrivacy()); + Assertions.assertNotNull(profile.getSignature()); + assertThatJson("{\"channelNo\":\"000000\",\"appNo\":\"111111\"}").isEqualTo(profile.getChannel()); + assertThatJson("{\"host\":\"http://127.0.0.1:8888\"," + + "\"connPool\":{\"maxRequests\":64,\"maxRequestPerHost\":64,\"connectTimeout\":10,\"socketTimeout\":60}," + + "\"headers\":{}," + + "\"proxy\":{\"enabled\":false,\"host\":null,\"port\":null,\"username\":\"\",\"password\":\"\",\"scheme\":\"http\"}}\n") + .isEqualTo(profile.getHttpProfile()); + } + + @Test + void httpClient() { + ApiClient client = ApiClientBuilder.custom() + .profile(buildProfile()) + .build(); + Assertions.assertNotNull(client); + } + + @Test + void build() { + ApiClient client = ApiClientBuilder.custom() + .profile(buildProfile()) + .httpClient(HttpClients.custom().build()) + .build(); + Assertions.assertNotNull(client); + } + + @Test + void build2() { + ApiClient client = ApiClientBuilder.custom() + .profile(buildProfileNotHttpProfile()) + .build(); + Assertions.assertNotNull(client); + } + + @Test + void build3() { + ApiClient client = ApiClientBuilder.custom() + .profile(buildProfileHasProxy()) + .build(); + Assertions.assertNotNull(client); + } + + Profile buildProfileNotHttpProfile() { + PrivateKey privateKey = KeyText.loadTestPrivateKeyRSA(); + X509Certificate certificate = KeyText.loadTestRSA(); + List list = new ArrayList<>(); + list.add(certificate); + CertificateProvider certificateProvider = new LocalCertificateProvider(list); + Privacy privacy = new TestPrivacy(privateKey, certificateProvider); + Signature signature = new DefaultSignature(certificateProvider, new TestSigner(privateKey), new TestVerifier(certificateProvider)); + + return new TestProfile( + privacy, + signature, + new DefaultChannel.Builder() + .channelNo("000000") + .appNo("111111") + .build(), + null + ); + } + + Profile buildProfileHasProxy() { + PrivateKey privateKey = KeyText.loadTestPrivateKeyRSA(); + X509Certificate certificate = KeyText.loadTestRSA(); + List list = new ArrayList<>(); + list.add(certificate); + CertificateProvider certificateProvider = new LocalCertificateProvider(list); + Privacy privacy = new TestPrivacy(privateKey, certificateProvider); + Signature signature = new DefaultSignature(certificateProvider, new TestSigner(privateKey), new TestVerifier(certificateProvider)); + + return new TestProfile( + privacy, + signature, + new DefaultChannel.Builder() + .channelNo("000000") + .appNo("111111") + .build(), + new DefaultHttpProfile.Builder() + .proxy(new Proxy.Builder() + .host("127.0.0.1") + .enabled() + .port("1000") + .build()) + .online(false) + .logEnabled(true) + .compressionEnabled(false) + .host("http://127.0.0.1:8888") + .build() + ); + } +} \ No newline at end of file diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/DefaultApiClientBuilderTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/DefaultApiClientBuilderTest.java deleted file mode 100644 index 4c8ebd0..0000000 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/DefaultApiClientBuilderTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.czcb.scfs.api.core.http; - -class DefaultApiClientBuilderTest { - -// @Test -// void newInstance() { -// } -// -// @Test -// void profile() { -// } -// -// @Test -// void httpClient() { -// } -// -// @Test -// void build() { -// } -} \ No newline at end of file diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientProxyTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientProxyTest.java index 389f755..6a58918 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientProxyTest.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientProxyTest.java @@ -16,7 +16,6 @@ import org.mockserver.client.MockServerClient; import org.mockserver.junit.jupiter.MockServerExtension; import org.mockserver.junit.jupiter.MockServerSettings; -import java.net.URL; import java.nio.charset.StandardCharsets; import java.security.PrivateKey; import java.security.cert.X509Certificate; @@ -61,7 +60,7 @@ class ApacheHttpclientProxyTest { @Test void doRemoteExecuteProxy() { - ApiClient apiClient = new DefaultApiClientBuilder() + ApiClient apiClient = ApiClientBuilder.custom() .profile(profile()) .build(); @@ -97,7 +96,8 @@ class ApacheHttpclientProxyTest { .body(new Gson().toJson(request)) .build(); - Assertions.assertThrows(TimestampException.class, () -> apiClient.post("/mock/proxy", new HttpHeaders(), requestBody, TestResponse.class)); + HttpHeaders headers = new HttpHeaders(); + Assertions.assertThrows(TimestampException.class, () -> apiClient.post("/mock/proxy", headers, requestBody, TestResponse.class)); } public static class TestRequest implements ApiRequest { diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientTest.java index 76d8576..0827ed2 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientTest.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientTest.java @@ -93,7 +93,7 @@ class ApacheHttpclientTest { } private ApiClient mock(String body, boolean compressionEnabled) { - ApiClient apiClient = new DefaultApiClientBuilder() + ApiClient apiClient = ApiClientBuilder.custom() .profile(profile(compressionEnabled)) .build(); diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientTestProxy.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientTestProxyTest.java similarity index 95% rename from scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientTestProxy.java rename to scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientTestProxyTest.java index 260a5b8..192dbc3 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientTestProxy.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientTestProxyTest.java @@ -28,7 +28,7 @@ import static org.mockserver.model.HttpResponse.response; @ExtendWith(MockServerExtension.class) @MockServerSettings(ports = {8888}) -class ApacheHttpclientTestProxy { +class ApacheHttpclientTestProxyTest { private MockServerClient client; @BeforeEach @@ -60,7 +60,7 @@ class ApacheHttpclientTestProxy { @Test void doRemoteExecuteProxy() { - ApiClient apiClient = new DefaultApiClientBuilder() + ApiClient apiClient = ApiClientBuilder.custom() .profile(profile()) .build(); @@ -96,7 +96,8 @@ class ApacheHttpclientTestProxy { .body(new Gson().toJson(request)) .build(); - Assertions.assertThrows(TimestampException.class, () -> apiClient.post("/mock/proxy", new HttpHeaders(), requestBody, TestResponse.class)); + HttpHeaders headers = new HttpHeaders(); + Assertions.assertThrows(TimestampException.class, () -> apiClient.post("/mock/proxy", headers, requestBody, TestResponse.class)); } public static class TestRequest implements ApiRequest { diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientV2Test.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientV2Test.java index 5164559..d157c33 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientV2Test.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientV2Test.java @@ -6,7 +6,6 @@ import com.czcb.scfs.api.core.exception.DecryptException; import com.czcb.scfs.api.core.http.*; import com.czcb.scfs.api.core.util.DateTimes; import com.czcb.scfs.api.core.util.Nonce; -import com.czcb.scfs.api.core.util.PemFile; import com.czcb.scfs.api.core.util.Strings; import com.google.gson.Gson; import org.junit.jupiter.api.Assertions; @@ -17,7 +16,6 @@ import org.mockserver.client.MockServerClient; import org.mockserver.junit.jupiter.MockServerExtension; import org.mockserver.junit.jupiter.MockServerSettings; -import java.net.URL; import java.nio.charset.StandardCharsets; import java.security.PrivateKey; import java.security.cert.X509Certificate; @@ -63,7 +61,7 @@ class ApacheHttpclientV2Test { @Test void doRemoteExecuteResponseBodyIsNull() { - ApiClient apiClient = new DefaultApiClientBuilder() + ApiClient apiClient = ApiClientBuilder.custom() .profile(profile()) .build(); @@ -99,14 +97,15 @@ class ApacheHttpclientV2Test { .body(new Gson().toJson(request)) .build(); - Assertions.assertThrows(DecryptException.class, () -> apiClient.post("/mock/responseBodyIsNull", new HttpHeaders(), requestBody, TestResponse.class)); + HttpHeaders headers = new HttpHeaders(); + Assertions.assertThrows(DecryptException.class, () -> apiClient.post("/mock/responseBodyIsNull", headers, requestBody, TestResponse.class)); } @Test void doRemoteExecuteGet() { TestResponse mockResponse = new TestResponse(); mockResponse.setName("123456"); - ApiClient apiClient = new DefaultApiClientBuilder() + ApiClient apiClient = ApiClientBuilder.custom() .profile(profile()) .build(); diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientV3Test.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientV3Test.java index b1b2063..72bddf7 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientV3Test.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/ApacheHttpclientV3Test.java @@ -7,7 +7,6 @@ import com.czcb.scfs.api.core.exception.TimestampException; import com.czcb.scfs.api.core.http.*; import com.czcb.scfs.api.core.util.DateTimes; import com.czcb.scfs.api.core.util.Nonce; -import com.czcb.scfs.api.core.util.PemFile; import com.czcb.scfs.api.core.util.Strings; import com.google.gson.Gson; import org.junit.jupiter.api.Assertions; @@ -18,7 +17,6 @@ import org.mockserver.client.MockServerClient; import org.mockserver.junit.jupiter.MockServerExtension; import org.mockserver.junit.jupiter.MockServerSettings; -import java.net.URL; import java.nio.charset.StandardCharsets; import java.security.PrivateKey; import java.security.cert.X509Certificate; @@ -63,7 +61,7 @@ class ApacheHttpclientV3Test { @Test void doRemoteExecuteTimestamp() { - ApiClient apiClient = new DefaultApiClientBuilder() + ApiClient apiClient = ApiClientBuilder.custom() .profile(profile()) .build(); @@ -99,12 +97,13 @@ class ApacheHttpclientV3Test { .body(new Gson().toJson(request)) .build(); - Assertions.assertThrows(TimestampException.class, () -> apiClient.post("/mock/timestamp", new HttpHeaders(), requestBody, TestResponse.class)); + HttpHeaders headers = new HttpHeaders(); + Assertions.assertThrows(TimestampException.class, () -> apiClient.post("/mock/timestamp", headers, requestBody, TestResponse.class)); } @Test void doRemoteExecuteJsonException() { - ApiClient apiClient = new DefaultApiClientBuilder() + ApiClient apiClient = ApiClientBuilder.custom() .profile(profile()) .build(); @@ -140,7 +139,8 @@ class ApacheHttpclientV3Test { .body(new Gson().toJson(request)) .build(); - Assertions.assertThrows(ApiClientException.class, () -> apiClient.post("/mock/json", new HttpHeaders(), requestBody, TestResponse.class)); + HttpHeaders headers = new HttpHeaders(); + Assertions.assertThrows(ApiClientException.class, () -> apiClient.post("/mock/json", headers, requestBody, TestResponse.class)); } public static class TestRequest implements ApiRequest { diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/TestPrivacyDecryptor.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/TestPrivacyDecryptor.java index 4ccd640..53169c3 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/TestPrivacyDecryptor.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/TestPrivacyDecryptor.java @@ -10,7 +10,7 @@ public class TestPrivacyDecryptor extends AbstractPrivacyDecryptor { * * @param privateKey 加密使用的私钥 */ - protected TestPrivacyDecryptor(PrivateKey privateKey) { + public TestPrivacyDecryptor(PrivateKey privateKey) { super("RSA/ECB/OAEPWithSHA-1AndMGF1Padding", privateKey, null); } } diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/TestPrivacyEncryptor.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/TestPrivacyEncryptor.java index e604e58..45b0710 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/TestPrivacyEncryptor.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/http/client/TestPrivacyEncryptor.java @@ -10,7 +10,7 @@ public class TestPrivacyEncryptor extends AbstractPrivacyEncryptor { * * @param publicKey 加密使用的公钥 */ - protected TestPrivacyEncryptor(PublicKey publicKey) { + public TestPrivacyEncryptor(PublicKey publicKey) { super("RSA/ECB/OAEPWithSHA-1AndMGF1Padding", publicKey, null); } } diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/util/StringsTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/util/StringsTest.java index 1f3ef53..01fec0b 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/util/StringsTest.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/util/StringsTest.java @@ -59,6 +59,6 @@ class StringsTest { void urlEncode() { String url = "https://www.baidu.com/s?ie=utf-8"; Assertions.assertEquals("https%3A%2F%2Fwww.baidu.com%2Fs%3Fie%3Dutf-8", Strings.urlEncode(url)); - assertThrows(EncodingException.class, () -> Assertions.assertEquals("", Strings.urlEncode(null))); + assertThrows(EncodingException.class, () -> Strings.urlEncode(null)); } } \ No newline at end of file diff --git a/scfs-api-service/src/main/java/com/czcb/scfs/api/service/file/FileDownloadService.java b/scfs-api-service/src/main/java/com/czcb/scfs/api/service/file/FileDownloadService.java index 7514046..64ab742 100644 --- a/scfs-api-service/src/main/java/com/czcb/scfs/api/service/file/FileDownloadService.java +++ b/scfs-api-service/src/main/java/com/czcb/scfs/api/service/file/FileDownloadService.java @@ -1,19 +1,20 @@ -package com.czcb.scfs.api.service.file; - -import com.czcb.scfs.api.core.ApiClient; - -/** - * 文件下载 - * - * @since 2.0.0 - */ -public class FileDownloadService { - private final ApiClient apiClient; - - public FileDownloadService(ApiClient apiClient) { - this.apiClient = apiClient; - } - - public void download() { - } -} +//package com.czcb.scfs.api.service.file; +// +//import com.czcb.scfs.api.core.ApiClient; +// +///** +// * 文件下载 +// * +// * @since 2.0.0 +// */ +//public class FileDownloadService { +// private final ApiClient apiClient; +// +// public FileDownloadService(ApiClient apiClient) { +// this.apiClient = apiClient; +// } +// +// public void download() { +// // 待实现 +// } +//} diff --git a/scfs-api-service/src/main/java/com/czcb/scfs/api/service/file/FileUploadService.java b/scfs-api-service/src/main/java/com/czcb/scfs/api/service/file/FileUploadService.java index e229f3f..f8d3dc4 100644 --- a/scfs-api-service/src/main/java/com/czcb/scfs/api/service/file/FileUploadService.java +++ b/scfs-api-service/src/main/java/com/czcb/scfs/api/service/file/FileUploadService.java @@ -1,27 +1,27 @@ -package com.czcb.scfs.api.service.file; - -import com.czcb.scfs.api.core.ApiClient; -import com.czcb.scfs.api.core.http.HttpHeaders; -import com.czcb.scfs.api.core.http.HttpResponse; -import com.czcb.scfs.api.service.file.model.FaceFileRequest; -import com.czcb.scfs.api.service.file.model.FaceFileResponse; - -/** - * 文件上传 - * - * @since 2.0.0 - */ -public class FileUploadService { - private final ApiClient apiClient; - - public FileUploadService(ApiClient apiClient) { - this.apiClient = apiClient; - } - - public FaceFileResponse face(FaceFileRequest request) { - String url = "/face/test"; - HttpHeaders headers = new HttpHeaders(); - HttpResponse httpResponse = apiClient.post(url, headers, request.toJson(), FaceFileResponse.class); - return httpResponse.getServiceResponse(); - } -} +//package com.czcb.scfs.api.service.file; +// +//import com.czcb.scfs.api.core.ApiClient; +//import com.czcb.scfs.api.core.http.HttpHeaders; +//import com.czcb.scfs.api.core.http.HttpResponse; +//import com.czcb.scfs.api.service.file.model.FaceFileRequest; +//import com.czcb.scfs.api.service.file.model.FaceFileResponse; +// +///** +// * 文件上传 +// * +// * @since 2.0.0 +// */ +//public class FileUploadService { +// private final ApiClient apiClient; +// +// public FileUploadService(ApiClient apiClient) { +// this.apiClient = apiClient; +// } +// +// public FaceFileResponse face(FaceFileRequest request) { +// String url = "/face/test"; +// HttpHeaders headers = new HttpHeaders(); +// HttpResponse httpResponse = apiClient.post(url, headers, request.toJson(), FaceFileResponse.class); +// return httpResponse.getServiceResponse(); +// } +//} diff --git a/scfs-api-service/src/test/java/com/czcb/scfs/api/service/MockResponse.java b/scfs-api-service/src/test/java/com/czcb/scfs/api/service/MockResponse.java index c22862c..6fe4da2 100644 --- a/scfs-api-service/src/test/java/com/czcb/scfs/api/service/MockResponse.java +++ b/scfs-api-service/src/test/java/com/czcb/scfs/api/service/MockResponse.java @@ -4,7 +4,7 @@ import com.czcb.scfs.api.core.ApiClient; import com.czcb.scfs.api.core.DefaultChannel; import com.czcb.scfs.api.core.Profile; import com.czcb.scfs.api.core.cipher.*; -import com.czcb.scfs.api.core.http.DefaultApiClientBuilder; +import com.czcb.scfs.api.core.http.ApiClientBuilder; import com.czcb.scfs.api.core.http.DefaultHttpProfile; import com.czcb.scfs.api.core.util.DateTimes; import com.czcb.scfs.api.core.util.Nonce; @@ -29,7 +29,7 @@ public class MockResponse { public static ApiClient getApiClient() { if (apiClient == null) { - apiClient = new DefaultApiClientBuilder() + apiClient = ApiClientBuilder.custom() .profile(profile()) .build(); } diff --git a/scfs-api-service/src/test/java/com/czcb/scfs/api/service/sms/SmsServiceTest.java b/scfs-api-service/src/test/java/com/czcb/scfs/api/service/sms/SmsServiceTest.java index 28b8ee4..4fd542c 100644 --- a/scfs-api-service/src/test/java/com/czcb/scfs/api/service/sms/SmsServiceTest.java +++ b/scfs-api-service/src/test/java/com/czcb/scfs/api/service/sms/SmsServiceTest.java @@ -1,5 +1,4 @@ -package com.czcb.scfs.api.service.sms; - -class SmsServiceTest { - -} \ No newline at end of file +//package com.czcb.scfs.api.service.sms; +// +//class SmsServiceTest { +//} \ No newline at end of file diff --git a/scfs-api-spring-boot-starter/src/main/java/com/czcb/scfs/spring/boot/starter/ScfsAutoConfiguration.java b/scfs-api-spring-boot-starter/src/main/java/com/czcb/scfs/spring/boot/starter/ScfsAutoConfiguration.java index 3dad45f..14bac2a 100644 --- a/scfs-api-spring-boot-starter/src/main/java/com/czcb/scfs/spring/boot/starter/ScfsAutoConfiguration.java +++ b/scfs-api-spring-boot-starter/src/main/java/com/czcb/scfs/spring/boot/starter/ScfsAutoConfiguration.java @@ -2,8 +2,7 @@ package com.czcb.scfs.spring.boot.starter; import com.czcb.scfs.api.core.ApiClient; import com.czcb.scfs.api.core.Profile; -import com.czcb.scfs.api.core.http.DefaultApiClientBuilder; -import com.czcb.scfs.api.service.file.FileUploadService; +import com.czcb.scfs.api.core.http.ApiClientBuilder; import com.czcb.scfs.api.service.health.EchoService; import com.czcb.scfs.api.service.sms.SmsService; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -27,7 +26,7 @@ public class ScfsAutoConfiguration { @Bean public ApiClient apiClient() { - return new DefaultApiClientBuilder() + return ApiClientBuilder.custom() .profile(profile) .build(); } @@ -41,9 +40,4 @@ public class ScfsAutoConfiguration { public EchoService echoService(ApiClient apiClient) { return new EchoService(apiClient); } - - @Bean - public FileUploadService fileUploadService(ApiClient apiClient) { - return new FileUploadService(apiClient); - } } diff --git a/scfs-api-spring-boot-starter/src/main/java/com/czcb/scfs/spring/boot/starter/SmConfiguration.java b/scfs-api-spring-boot-starter/src/main/java/com/czcb/scfs/spring/boot/starter/SmConfiguration.java index 29c55ec..ecde487 100644 --- a/scfs-api-spring-boot-starter/src/main/java/com/czcb/scfs/spring/boot/starter/SmConfiguration.java +++ b/scfs-api-spring-boot-starter/src/main/java/com/czcb/scfs/spring/boot/starter/SmConfiguration.java @@ -25,7 +25,7 @@ public class SmConfiguration extends AbstractAutoConfiguration { private ScfsApiGatewayProperties properties; @Override - protected ScfsApiGatewayProperties getProperties() { + public ScfsApiGatewayProperties getProperties() { return properties; }