feat: 发号器测试
parent
e3be3de77b
commit
b6e4e4dd31
|
|
@ -15,11 +15,7 @@ public class DefaultSequencer implements Sequencer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String next() {
|
public String next() {
|
||||||
return String.format("%s%s%s", getCurrentDate(), getRandomStr(), getNumber());
|
return String.format("%s%s%s", DateTimes.of("yyyyMMdd"), getRandomStr(), number.getAndIncrement());
|
||||||
}
|
|
||||||
|
|
||||||
private String getCurrentDate() {
|
|
||||||
return DateTimes.of("yyyyMMdd");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getRandomStr() {
|
private String getRandomStr() {
|
||||||
|
|
@ -30,8 +26,4 @@ public class DefaultSequencer implements Sequencer {
|
||||||
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Integer getNumber() {
|
|
||||||
return number.getAndIncrement();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,9 @@ import com.czcb.scfs.api.core.http.Proxy;
|
||||||
* @since 2.0.0
|
* @since 2.0.0
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractAutoConfiguration {
|
public abstract class AbstractAutoConfiguration {
|
||||||
|
public static final String PREFIX = "scfs.api-gateway.cipher";
|
||||||
|
public static final String CIPHER_TYPE = "type";
|
||||||
|
|
||||||
protected abstract ScfsApiGatewayProperties getProperties();
|
protected abstract ScfsApiGatewayProperties getProperties();
|
||||||
|
|
||||||
protected HttpProfile getHttpProfile() {
|
protected HttpProfile getHttpProfile() {
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
package com.czcb.scfs.spring.boot.starter;
|
package com.czcb.scfs.spring.boot.starter;
|
||||||
|
|
||||||
|
import com.czcb.scfs.api.core.cipher.Sequencer;
|
||||||
import com.czcb.scfs.api.core.cipher.StoreType;
|
import com.czcb.scfs.api.core.cipher.StoreType;
|
||||||
import com.czcb.scfs.api.core.util.PemFile;
|
import com.czcb.scfs.api.core.util.PemFile;
|
||||||
import com.czcb.scfs.api.rsa.RsaProfile;
|
import com.czcb.scfs.api.rsa.RsaProfile;
|
||||||
|
import lombok.Getter;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
|
@ -16,22 +18,25 @@ import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static com.czcb.scfs.spring.boot.starter.AbstractAutoConfiguration.CIPHER_TYPE;
|
||||||
|
import static com.czcb.scfs.spring.boot.starter.AbstractAutoConfiguration.PREFIX;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 2.0.0
|
* @since 2.0.0
|
||||||
*/
|
*/
|
||||||
|
@Getter
|
||||||
@Configuration
|
@Configuration
|
||||||
@ConditionalOnClass(RsaProfile.class)
|
@ConditionalOnClass(RsaProfile.class)
|
||||||
@ConditionalOnProperty(value = "scfs.api-gateway.cipher.type", havingValue = "rsa")
|
@ConditionalOnProperty(prefix = PREFIX, value = CIPHER_TYPE, havingValue = RsaConfiguration.HAVING_VALUE)
|
||||||
public class RsaConfiguration extends AbstractAutoConfiguration {
|
public class RsaConfiguration extends AbstractAutoConfiguration {
|
||||||
|
public static final String HAVING_VALUE = "rsa";
|
||||||
|
|
||||||
private final ScfsApiGatewayProperties properties;
|
private final ScfsApiGatewayProperties properties;
|
||||||
|
private final Sequencer sequencer;
|
||||||
|
|
||||||
public RsaConfiguration(ScfsApiGatewayProperties properties) {
|
public RsaConfiguration(ScfsApiGatewayProperties properties, Sequencer sequencer) {
|
||||||
this.properties = properties;
|
this.properties = properties;
|
||||||
}
|
this.sequencer = sequencer;
|
||||||
|
|
||||||
@Override
|
|
||||||
public ScfsApiGatewayProperties getProperties() {
|
|
||||||
return properties;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<X509Certificate> getCertificates() {
|
private List<X509Certificate> getCertificates() {
|
||||||
|
|
@ -63,6 +68,7 @@ public class RsaConfiguration extends AbstractAutoConfiguration {
|
||||||
.httpProfile(getHttpProfile())
|
.httpProfile(getHttpProfile())
|
||||||
.privateKey(getPrivateKey())
|
.privateKey(getPrivateKey())
|
||||||
.addCertificates(getCertificates())
|
.addCertificates(getCertificates())
|
||||||
|
.sequencer(getSequencer())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,6 @@ package com.czcb.scfs.spring.boot.starter;
|
||||||
|
|
||||||
import com.czcb.scfs.api.core.ApiClient;
|
import com.czcb.scfs.api.core.ApiClient;
|
||||||
import com.czcb.scfs.api.core.Profile;
|
import com.czcb.scfs.api.core.Profile;
|
||||||
import com.czcb.scfs.api.core.cipher.DefaultSequencer;
|
|
||||||
import com.czcb.scfs.api.core.cipher.Sequencer;
|
|
||||||
import com.czcb.scfs.api.core.http.ApiClientBuilder;
|
import com.czcb.scfs.api.core.http.ApiClientBuilder;
|
||||||
import com.czcb.scfs.api.service.echo.EchoService;
|
import com.czcb.scfs.api.service.echo.EchoService;
|
||||||
import com.czcb.scfs.api.service.v2.account.AccountService;
|
import com.czcb.scfs.api.service.v2.account.AccountService;
|
||||||
|
|
@ -25,7 +23,6 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.ComponentScan;
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.Import;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
|
@ -35,7 +32,6 @@ import javax.annotation.Resource;
|
||||||
@Configuration
|
@Configuration
|
||||||
@ComponentScan("com.czcb.scfs.spring.boot.starter")
|
@ComponentScan("com.czcb.scfs.spring.boot.starter")
|
||||||
@EnableConfigurationProperties({ScfsApiGatewayProperties.class})
|
@EnableConfigurationProperties({ScfsApiGatewayProperties.class})
|
||||||
@Import({SmConfiguration.class, RsaConfiguration.class})
|
|
||||||
public class ScfsAutoConfiguration {
|
public class ScfsAutoConfiguration {
|
||||||
@Resource
|
@Resource
|
||||||
private Profile profile;
|
private Profile profile;
|
||||||
|
|
@ -56,15 +52,6 @@ public class ScfsAutoConfiguration {
|
||||||
return new EchoService(apiClient);
|
return new EchoService(apiClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 发号器
|
|
||||||
*/
|
|
||||||
@Bean
|
|
||||||
@ConditionalOnMissingBean
|
|
||||||
public Sequencer sequencer() {
|
|
||||||
return new DefaultSequencer();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 账户相关
|
* 账户相关
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.czcb.scfs.spring.boot.starter;
|
||||||
|
|
||||||
|
import com.czcb.scfs.api.core.cipher.DefaultSequencer;
|
||||||
|
import com.czcb.scfs.api.core.cipher.Sequencer;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wangwei
|
||||||
|
* @since 2024/7/26
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
public class SequencerAutoConfiguration {
|
||||||
|
/**
|
||||||
|
* 发号器
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
@ConditionalOnMissingBean
|
||||||
|
public Sequencer sequencer() {
|
||||||
|
return new DefaultSequencer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
package com.czcb.scfs.spring.boot.starter;
|
package com.czcb.scfs.spring.boot.starter;
|
||||||
|
|
||||||
|
import com.czcb.scfs.api.core.cipher.Sequencer;
|
||||||
import com.czcb.scfs.api.core.cipher.StoreType;
|
import com.czcb.scfs.api.core.cipher.StoreType;
|
||||||
import com.czcb.scfs.api.core.util.PemFile;
|
import com.czcb.scfs.api.core.util.PemFile;
|
||||||
import com.czcb.scfs.api.sm.SmProfile;
|
import com.czcb.scfs.api.sm.SmProfile;
|
||||||
import com.tencent.kona.KonaProvider;
|
import com.tencent.kona.KonaProvider;
|
||||||
|
import lombok.Getter;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
|
@ -17,22 +19,26 @@ import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static com.czcb.scfs.spring.boot.starter.AbstractAutoConfiguration.CIPHER_TYPE;
|
||||||
|
import static com.czcb.scfs.spring.boot.starter.AbstractAutoConfiguration.PREFIX;
|
||||||
|
import static com.czcb.scfs.spring.boot.starter.SmConfiguration.HAVING_VALUE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 2.0.0
|
* @since 2.0.0
|
||||||
*/
|
*/
|
||||||
|
@Getter
|
||||||
@Configuration
|
@Configuration
|
||||||
@ConditionalOnClass(SmProfile.class)
|
@ConditionalOnClass(SmProfile.class)
|
||||||
@ConditionalOnProperty(value = "scfs.api-gateway.cipher.type", havingValue = "sm", matchIfMissing = true)
|
@ConditionalOnProperty(prefix = PREFIX, value = CIPHER_TYPE, havingValue = HAVING_VALUE, matchIfMissing = true)
|
||||||
public class SmConfiguration extends AbstractAutoConfiguration {
|
public class SmConfiguration extends AbstractAutoConfiguration {
|
||||||
|
public static final String HAVING_VALUE = "sm";
|
||||||
|
|
||||||
private final ScfsApiGatewayProperties properties;
|
private final ScfsApiGatewayProperties properties;
|
||||||
|
private final Sequencer sequencer;
|
||||||
|
|
||||||
public SmConfiguration(ScfsApiGatewayProperties properties) {
|
public SmConfiguration(ScfsApiGatewayProperties properties, Sequencer sequencer) {
|
||||||
this.properties = properties;
|
this.properties = properties;
|
||||||
}
|
this.sequencer = sequencer;
|
||||||
|
|
||||||
@Override
|
|
||||||
public ScfsApiGatewayProperties getProperties() {
|
|
||||||
return properties;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<X509Certificate> getCertificates() {
|
private List<X509Certificate> getCertificates() {
|
||||||
|
|
@ -65,6 +71,7 @@ public class SmConfiguration extends AbstractAutoConfiguration {
|
||||||
.privateKey(getPrivateKey())
|
.privateKey(getPrivateKey())
|
||||||
.certificateSerial(getChannelCertificateSerial())
|
.certificateSerial(getChannelCertificateSerial())
|
||||||
.addCertificates(getCertificates())
|
.addCertificates(getCertificates())
|
||||||
|
.sequencer(getSequencer())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
package com.czcb.scfs.spring.boot.starter;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class AbstractAutoConfigurationTest {
|
||||||
|
@Test
|
||||||
|
void test() {
|
||||||
|
Assertions.assertEquals("scfs.api-gateway.cipher", AbstractAutoConfiguration.PREFIX);
|
||||||
|
Assertions.assertEquals("type", AbstractAutoConfiguration.CIPHER_TYPE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,14 +1,21 @@
|
||||||
package com.czcb.scfs.spring.boot.starter;
|
package com.czcb.scfs.spring.boot.starter;
|
||||||
|
|
||||||
|
import com.czcb.scfs.api.core.cipher.DefaultSequencer;
|
||||||
import com.czcb.scfs.api.core.cipher.StoreType;
|
import com.czcb.scfs.api.core.cipher.StoreType;
|
||||||
import com.czcb.scfs.api.core.http.LogLevel;
|
import com.czcb.scfs.api.core.http.LogLevel;
|
||||||
import com.czcb.scfs.api.rsa.RsaProfile;
|
import com.czcb.scfs.api.rsa.RsaProfile;
|
||||||
import org.assertj.core.util.Lists;
|
import org.assertj.core.util.Lists;
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
import java.lang.annotation.Annotation;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
|
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
|
||||||
|
|
||||||
|
|
@ -16,6 +23,46 @@ class RsaConfigurationTest {
|
||||||
|
|
||||||
private RsaConfiguration rsaConfiguration;
|
private RsaConfiguration rsaConfiguration;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testHavingValue() {
|
||||||
|
Assertions.assertEquals("rsa", RsaConfiguration.HAVING_VALUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testAnnotation() {
|
||||||
|
Annotation[] annotations = RsaConfiguration.class.getAnnotations();
|
||||||
|
Assertions.assertTrue(Arrays.stream(annotations).anyMatch(annotation -> annotation.annotationType().isAssignableFrom(Configuration.class)));
|
||||||
|
Assertions.assertTrue(Arrays.stream(annotations).anyMatch(annotation -> annotation.annotationType().isAssignableFrom(ConditionalOnClass.class)));
|
||||||
|
Assertions.assertTrue(Arrays.stream(annotations).anyMatch(annotation -> annotation.annotationType().isAssignableFrom(ConditionalOnProperty.class)));
|
||||||
|
|
||||||
|
Assertions.assertEquals(3, annotations.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testConditionalOnClass() {
|
||||||
|
Annotation[] annotations = RsaConfiguration.class.getAnnotations();
|
||||||
|
Optional<Annotation> optional = Arrays.stream(annotations)
|
||||||
|
.filter(annotation -> annotation.annotationType().isAssignableFrom(ConditionalOnClass.class))
|
||||||
|
.findFirst();
|
||||||
|
Assertions.assertTrue(optional.isPresent());
|
||||||
|
Assertions.assertArrayEquals(new Class[]{RsaProfile.class}, ((ConditionalOnClass) optional.get()).value());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testConditionalOnProperty() {
|
||||||
|
Annotation[] annotations = RsaConfiguration.class.getAnnotations();
|
||||||
|
Optional<Annotation> optional = Arrays.stream(annotations)
|
||||||
|
.filter(annotation -> annotation.annotationType().isAssignableFrom(ConditionalOnProperty.class))
|
||||||
|
.findFirst();
|
||||||
|
|
||||||
|
Assertions.assertTrue(optional.isPresent());
|
||||||
|
Assertions.assertFalse(((ConditionalOnProperty) optional.get()).matchIfMissing());
|
||||||
|
Assertions.assertArrayEquals(new String[]{"type"}, ((ConditionalOnProperty) optional.get()).value());
|
||||||
|
Assertions.assertEquals("scfs.api-gateway.cipher", ((ConditionalOnProperty) optional.get()).prefix());
|
||||||
|
Assertions.assertEquals("rsa", ((ConditionalOnProperty) optional.get()).havingValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private ScfsApiGatewayProperties properties() {
|
private ScfsApiGatewayProperties properties() {
|
||||||
ScfsApiGatewayProperties properties = new ScfsApiGatewayProperties();
|
ScfsApiGatewayProperties properties = new ScfsApiGatewayProperties();
|
||||||
|
|
||||||
|
|
@ -63,14 +110,14 @@ class RsaConfigurationTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void getProperties() {
|
void getProperties() {
|
||||||
rsaConfiguration = new RsaConfiguration(properties());
|
rsaConfiguration = new RsaConfiguration(properties(), new DefaultSequencer());
|
||||||
ScfsApiGatewayProperties properties = rsaConfiguration.getProperties();
|
ScfsApiGatewayProperties properties = rsaConfiguration.getProperties();
|
||||||
Assertions.assertNotNull(properties);
|
Assertions.assertNotNull(properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void smProfile() {
|
void smProfile() {
|
||||||
rsaConfiguration = new RsaConfiguration(properties());
|
rsaConfiguration = new RsaConfiguration(properties(), new DefaultSequencer());
|
||||||
RsaProfile profile = rsaConfiguration.rsaProfile();
|
RsaProfile profile = rsaConfiguration.rsaProfile();
|
||||||
Assertions.assertNotNull(profile);
|
Assertions.assertNotNull(profile);
|
||||||
assertThatJson("{\"appNo\":\"111111\",\"channelNo\":\"000000\",\"channelGroupMode\":false}").isEqualTo(profile.getChannel());
|
assertThatJson("{\"appNo\":\"111111\",\"channelNo\":\"000000\",\"channelGroupMode\":false}").isEqualTo(profile.getChannel());
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.czcb.scfs.spring.boot.starter;
|
package com.czcb.scfs.spring.boot.starter;
|
||||||
|
|
||||||
import com.czcb.scfs.api.core.ApiClient;
|
import com.czcb.scfs.api.core.ApiClient;
|
||||||
|
import com.czcb.scfs.api.core.cipher.DefaultSequencer;
|
||||||
import com.czcb.scfs.api.core.cipher.StoreType;
|
import com.czcb.scfs.api.core.cipher.StoreType;
|
||||||
import com.czcb.scfs.api.core.http.LogLevel;
|
import com.czcb.scfs.api.core.http.LogLevel;
|
||||||
import com.czcb.scfs.api.core.http.client.ApacheHttpclient;
|
import com.czcb.scfs.api.core.http.client.ApacheHttpclient;
|
||||||
|
|
@ -10,14 +11,50 @@ import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
import java.lang.annotation.Annotation;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
class ScfsAutoConfigurationTest {
|
class ScfsAutoConfigurationTest {
|
||||||
private final ScfsAutoConfiguration configuration = new ScfsAutoConfiguration();
|
private final ScfsAutoConfiguration configuration = new ScfsAutoConfiguration();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testAnnotation() {
|
||||||
|
Annotation[] annotations = ScfsAutoConfiguration.class.getAnnotations();
|
||||||
|
Assertions.assertTrue(Arrays.stream(annotations).anyMatch(annotation -> annotation.annotationType().isAssignableFrom(Configuration.class)));
|
||||||
|
Assertions.assertTrue(Arrays.stream(annotations).anyMatch(annotation -> annotation.annotationType().isAssignableFrom(ComponentScan.class)));
|
||||||
|
Assertions.assertTrue(Arrays.stream(annotations).anyMatch(annotation -> annotation.annotationType().isAssignableFrom(EnableConfigurationProperties.class)));
|
||||||
|
|
||||||
|
Assertions.assertEquals(3, annotations.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testComponentScan() {
|
||||||
|
Annotation[] annotations = ScfsAutoConfiguration.class.getAnnotations();
|
||||||
|
Optional<Annotation> optional = Arrays.stream(annotations)
|
||||||
|
.filter(annotation -> annotation.annotationType().isAssignableFrom(ComponentScan.class))
|
||||||
|
.findFirst();
|
||||||
|
Assertions.assertTrue(optional.isPresent());
|
||||||
|
Assertions.assertArrayEquals(new String[]{"com.czcb.scfs.spring.boot.starter"}, ((ComponentScan) optional.get()).value());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testEnableConfigurationProperties() {
|
||||||
|
Annotation[] annotations = ScfsAutoConfiguration.class.getAnnotations();
|
||||||
|
Optional<Annotation> optional = Arrays.stream(annotations)
|
||||||
|
.filter(annotation -> annotation.annotationType().isAssignableFrom(EnableConfigurationProperties.class))
|
||||||
|
.findFirst();
|
||||||
|
Assertions.assertTrue(optional.isPresent());
|
||||||
|
Assertions.assertArrayEquals(new Class[]{ScfsApiGatewayProperties.class}, ((EnableConfigurationProperties) optional.get()).value());
|
||||||
|
}
|
||||||
|
|
||||||
private ScfsApiGatewayProperties properties() {
|
private ScfsApiGatewayProperties properties() {
|
||||||
ScfsApiGatewayProperties properties = new ScfsApiGatewayProperties();
|
ScfsApiGatewayProperties properties = new ScfsApiGatewayProperties();
|
||||||
|
|
||||||
|
|
@ -63,7 +100,7 @@ class ScfsAutoConfigurationTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ApiClient apiClient() {
|
protected ApiClient apiClient() {
|
||||||
SmConfiguration smConfiguration = new SmConfiguration(properties());
|
SmConfiguration smConfiguration = new SmConfiguration(properties(), new DefaultSequencer());
|
||||||
return new ApacheHttpclient(HttpClients.custom().build(), smConfiguration.smProfile());
|
return new ApacheHttpclient(HttpClients.custom().build(), smConfiguration.smProfile());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -72,11 +109,6 @@ class ScfsAutoConfigurationTest {
|
||||||
Assertions.assertNotNull(configuration.echoService(apiClient()));
|
Assertions.assertNotNull(configuration.echoService(apiClient()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
void sequencer() {
|
|
||||||
Assertions.assertNotNull(configuration.sequencer());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void accountService() {
|
void accountService() {
|
||||||
Assertions.assertNotNull(configuration.accountService(apiClient()));
|
Assertions.assertNotNull(configuration.accountService(apiClient()));
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
package com.czcb.scfs.spring.boot.starter;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class SequencerAutoConfigurationTest {
|
||||||
|
@Test
|
||||||
|
void sequencer() {
|
||||||
|
SequencerAutoConfiguration configuration = new SequencerAutoConfiguration();
|
||||||
|
Assertions.assertNotNull(configuration.sequencer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.czcb.scfs.spring.boot.starter;
|
package com.czcb.scfs.spring.boot.starter;
|
||||||
|
|
||||||
|
import com.czcb.scfs.api.core.cipher.DefaultSequencer;
|
||||||
import com.czcb.scfs.api.core.cipher.StoreType;
|
import com.czcb.scfs.api.core.cipher.StoreType;
|
||||||
import com.czcb.scfs.api.core.http.LogLevel;
|
import com.czcb.scfs.api.core.http.LogLevel;
|
||||||
import com.czcb.scfs.api.sm.SmProfile;
|
import com.czcb.scfs.api.sm.SmProfile;
|
||||||
|
|
@ -8,9 +9,15 @@ import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
import java.lang.annotation.Annotation;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
|
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
|
||||||
|
|
||||||
|
|
@ -19,6 +26,45 @@ class SmConfigurationTest {
|
||||||
|
|
||||||
private SmConfiguration smConfiguration;
|
private SmConfiguration smConfiguration;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testHavingValue() {
|
||||||
|
Assertions.assertEquals("sm", SmConfiguration.HAVING_VALUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testAnnotation() {
|
||||||
|
Annotation[] annotations = SmConfiguration.class.getAnnotations();
|
||||||
|
Assertions.assertTrue(Arrays.stream(annotations).anyMatch(annotation -> annotation.annotationType().isAssignableFrom(Configuration.class)));
|
||||||
|
Assertions.assertTrue(Arrays.stream(annotations).anyMatch(annotation -> annotation.annotationType().isAssignableFrom(ConditionalOnClass.class)));
|
||||||
|
Assertions.assertTrue(Arrays.stream(annotations).anyMatch(annotation -> annotation.annotationType().isAssignableFrom(ConditionalOnProperty.class)));
|
||||||
|
|
||||||
|
Assertions.assertEquals(3, annotations.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testConditionalOnClass() {
|
||||||
|
Annotation[] annotations = SmConfiguration.class.getAnnotations();
|
||||||
|
Optional<Annotation> optional = Arrays.stream(annotations)
|
||||||
|
.filter(annotation -> annotation.annotationType().isAssignableFrom(ConditionalOnClass.class))
|
||||||
|
.findFirst();
|
||||||
|
Assertions.assertTrue(optional.isPresent());
|
||||||
|
Assertions.assertArrayEquals(new Class[]{SmProfile.class}, ((ConditionalOnClass) optional.get()).value());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testConditionalOnProperty() {
|
||||||
|
Annotation[] annotations = SmConfiguration.class.getAnnotations();
|
||||||
|
Optional<Annotation> optional = Arrays.stream(annotations)
|
||||||
|
.filter(annotation -> annotation.annotationType().isAssignableFrom(ConditionalOnProperty.class))
|
||||||
|
.findFirst();
|
||||||
|
|
||||||
|
Assertions.assertTrue(optional.isPresent());
|
||||||
|
Assertions.assertTrue(((ConditionalOnProperty) optional.get()).matchIfMissing());
|
||||||
|
Assertions.assertArrayEquals(new String[]{"type"}, ((ConditionalOnProperty) optional.get()).value());
|
||||||
|
Assertions.assertEquals("scfs.api-gateway.cipher", ((ConditionalOnProperty) optional.get()).prefix());
|
||||||
|
Assertions.assertEquals("sm", ((ConditionalOnProperty) optional.get()).havingValue());
|
||||||
|
}
|
||||||
|
|
||||||
private ScfsApiGatewayProperties properties(boolean channelGroupMode) {
|
private ScfsApiGatewayProperties properties(boolean channelGroupMode) {
|
||||||
ScfsApiGatewayProperties properties = new ScfsApiGatewayProperties();
|
ScfsApiGatewayProperties properties = new ScfsApiGatewayProperties();
|
||||||
|
|
||||||
|
|
@ -70,14 +116,14 @@ class SmConfigurationTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void getProperties() {
|
void getProperties() {
|
||||||
smConfiguration = new SmConfiguration(properties(false));
|
smConfiguration = new SmConfiguration(properties(false), new DefaultSequencer());
|
||||||
ScfsApiGatewayProperties properties = smConfiguration.getProperties();
|
ScfsApiGatewayProperties properties = smConfiguration.getProperties();
|
||||||
Assertions.assertNotNull(properties);
|
Assertions.assertNotNull(properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void smProfile() {
|
void smProfile() {
|
||||||
smConfiguration = new SmConfiguration(properties(true));
|
smConfiguration = new SmConfiguration(properties(true), new DefaultSequencer());
|
||||||
SmProfile smProfile = smConfiguration.smProfile();
|
SmProfile smProfile = smConfiguration.smProfile();
|
||||||
Assertions.assertNotNull(smProfile);
|
Assertions.assertNotNull(smProfile);
|
||||||
assertThatJson("{\"appNo\":\"111111\",\"channelNo\":\"000000\",\"channelGroupMode\":true}").isEqualTo(smProfile.getChannel());
|
assertThatJson("{\"appNo\":\"111111\",\"channelNo\":\"000000\",\"channelGroupMode\":true}").isEqualTo(smProfile.getChannel());
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
package com.czcb.scfs.api.test;
|
||||||
|
|
||||||
|
import com.czcb.scfs.api.core.cipher.Sequencer;
|
||||||
|
import com.czcb.scfs.api.service.echo.EchoService;
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试自定义发号器
|
||||||
|
*
|
||||||
|
* @author wangwei
|
||||||
|
* @since 2024/7/26
|
||||||
|
*/
|
||||||
|
@SpringBootTest
|
||||||
|
@Import(CustomSequencerTest.CustomSequencer.class)
|
||||||
|
class CustomSequencerTest {
|
||||||
|
@Resource
|
||||||
|
private EchoService echoService;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test() {
|
||||||
|
Assertions.assertThrows(UnsupportedOperationException.class, () -> echoService.echo());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class CustomSequencer implements Sequencer {
|
||||||
|
@Override
|
||||||
|
public String next() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue