mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-01 10:48:43 +08:00 
			
		
		
		
	多模块重构 13:迁移集成测试~
This commit is contained in:
		| @@ -0,0 +1,53 @@ | ||||
| package cn.iocoder.yudao.module.system.job; | ||||
|  | ||||
| import cn.hutool.core.util.StrUtil; | ||||
| import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager; | ||||
| import cn.iocoder.yudao.module.system.job.auth.UserSessionTimeoutJob; | ||||
| import cn.iocoder.yudao.module.system.test.BaseDbUnitTest; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.quartz.SchedulerException; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
|  | ||||
| public class SchedulerManagerTest extends BaseDbUnitTest { | ||||
|  | ||||
|     @Resource | ||||
|     private SchedulerManager schedulerManager; | ||||
|  | ||||
|     @Test | ||||
|     public void testAddJob() throws SchedulerException { | ||||
|         String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName()); | ||||
|         schedulerManager.addJob(1L, jobHandlerName, "test", "0/10 * * * * ? *", 0, 0); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testUpdateJob() throws SchedulerException { | ||||
|         String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName()); | ||||
|         schedulerManager.updateJob(jobHandlerName, "hahaha", "0/20 * * * * ? *", 0, 0); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testDeleteJob() throws SchedulerException { | ||||
|         String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName()); | ||||
|         schedulerManager.deleteJob(jobHandlerName); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testPauseJob() throws SchedulerException { | ||||
|         String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName()); | ||||
|         schedulerManager.pauseJob(jobHandlerName); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testResumeJob() throws SchedulerException { | ||||
|         String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName()); | ||||
|         schedulerManager.resumeJob(jobHandlerName); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testTriggerJob() throws SchedulerException { | ||||
|         String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName()); | ||||
|         schedulerManager.triggerJob(1L, jobHandlerName, "niubi!!!"); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,62 @@ | ||||
| package cn.iocoder.yudao.module.system.mq; | ||||
|  | ||||
| import cn.hutool.core.thread.ThreadUtil; | ||||
| import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; | ||||
| import cn.iocoder.yudao.module.system.mq.consumer.mail.MailSendConsumer; | ||||
| import cn.iocoder.yudao.module.system.mq.consumer.sms.SmsSendConsumer; | ||||
| import cn.iocoder.yudao.module.system.mq.message.mail.MailSendMessage; | ||||
| import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; | ||||
| import cn.iocoder.yudao.module.system.test.BaseRedisIntegrationTest; | ||||
| import org.junit.jupiter.api.Disabled; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.context.annotation.Import; | ||||
| import org.springframework.data.redis.core.RedisTemplate; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import java.util.concurrent.TimeUnit; | ||||
|  | ||||
| public class RedisStreamTest  { | ||||
|  | ||||
|     @Import({SmsSendConsumer.class, MailSendConsumer.class}) | ||||
|     @Disabled | ||||
|     public static class ConsumerTest extends BaseRedisIntegrationTest { | ||||
|  | ||||
|         @Test | ||||
|         public void testConsumer() { | ||||
|             ThreadUtil.sleep(1, TimeUnit.DAYS); | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Disabled | ||||
|     public static class ProducerTest extends BaseRedisIntegrationTest { | ||||
|  | ||||
|         @Resource | ||||
|         private RedisMQTemplate redisMQTemplate; | ||||
|  | ||||
|         @Resource | ||||
|         private RedisTemplate<String, Object> redisTemplate; | ||||
|  | ||||
|         @Test | ||||
|         public void testProducer01() { | ||||
|             for (int i = 0; i < 100; i++) { | ||||
|                 // 创建消息 | ||||
|                 SmsSendMessage message = new SmsSendMessage(); | ||||
|                 message.setMobile("15601691300").setApiTemplateId("test:" + i); | ||||
|                 // 发送消息 | ||||
|                 redisMQTemplate.send(message); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         @Test | ||||
|         public void testProducer02() { | ||||
|             // 创建消息 | ||||
|             MailSendMessage message = new MailSendMessage(); | ||||
|             message.setAddress("fangfang@mihayou.com").setTemplateCode("test"); | ||||
|             // 发送消息 | ||||
|             redisMQTemplate.send(message); | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,4 @@ | ||||
| /** | ||||
|  * 占位 | ||||
|  */ | ||||
| package cn.iocoder.yudao.module.system.service; | ||||
| @@ -0,0 +1,71 @@ | ||||
| package cn.iocoder.yudao.module.system.service.sms; | ||||
|  | ||||
| import cn.hutool.core.map.MapUtil; | ||||
| import cn.hutool.core.thread.ThreadUtil; | ||||
| import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; | ||||
| import cn.iocoder.yudao.framework.sms.config.YudaoSmsAutoConfiguration; | ||||
| import cn.iocoder.yudao.module.system.test.BaseDbAndRedisIntegrationTest; | ||||
| import cn.iocoder.yudao.module.system.mq.consumer.sms.SmsSendConsumer; | ||||
| import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer; | ||||
| import cn.iocoder.yudao.module.system.service.user.AdminUserService; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.boot.test.mock.mockito.MockBean; | ||||
| import org.springframework.context.annotation.Import; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import java.util.Map; | ||||
| import java.util.concurrent.TimeUnit; | ||||
|  | ||||
| // TODO @芋艿:需要迁移 | ||||
| @Import({YudaoSmsAutoConfiguration.class, | ||||
|         SmsChannelServiceImpl.class, SmsSendServiceImpl.class, SmsTemplateServiceImpl.class, SmsLogServiceImpl.class, | ||||
|         SmsProducer.class, SmsSendConsumer.class}) | ||||
| public class SmsServiceIntegrationTest extends BaseDbAndRedisIntegrationTest { | ||||
|  | ||||
|     @Resource | ||||
|     private SmsSendServiceImpl smsService; | ||||
|     @Resource | ||||
|     private SmsChannelServiceImpl smsChannelService; | ||||
|  | ||||
|     @MockBean | ||||
|     private AdminUserService userService; | ||||
|  | ||||
|     @Test | ||||
|     public void testSendSingleSms_yunpianSuccess() { | ||||
|         // 参数准备 | ||||
|         String mobile = "15601691399"; | ||||
|         Long userId = 1L; | ||||
|         Integer userType = UserTypeEnum.ADMIN.getValue(); | ||||
|         String templateCode = "test_01"; | ||||
|         Map<String, Object> templateParams = MapUtil.<String, Object>builder() | ||||
|                 .put("operation", "登录").put("code", "1234").build(); | ||||
|         // 调用 | ||||
|         smsService.sendSingleSms(mobile, userId, userType, templateCode, templateParams); | ||||
|  | ||||
|         // 等待 MQ 消费 | ||||
|         ThreadUtil.sleep(1, TimeUnit.HOURS); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testSendSingleSms_aliyunSuccess() { | ||||
|         // 参数准备 | ||||
|         String mobile = "15601691399"; | ||||
|         Long userId = 1L; | ||||
|         Integer userType = UserTypeEnum.ADMIN.getValue(); | ||||
|         String templateCode = "test_02"; | ||||
|         Map<String, Object> templateParams = MapUtil.<String, Object>builder() | ||||
|                 .put("code", "1234").build(); | ||||
|         // 调用 | ||||
|         smsService.sendSingleSms(mobile, userId, userType, templateCode, templateParams); | ||||
|  | ||||
|         // 等待 MQ 消费 | ||||
|         ThreadUtil.sleep(1, TimeUnit.HOURS); | ||||
|     } | ||||
|  | ||||
| //    @Test | ||||
| //    public void testDoSendSms() { | ||||
| //        // 等待 MQ 消费 | ||||
| //        ThreadUtil.sleep(1, TimeUnit.HOURS); | ||||
| //    } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,38 @@ | ||||
| package cn.iocoder.yudao.module.system.test; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; | ||||
| import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; | ||||
| import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; | ||||
| import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration; | ||||
| import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; | ||||
| import org.redisson.spring.starter.RedissonAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; | ||||
| import org.springframework.boot.test.context.SpringBootTest; | ||||
| import org.springframework.context.annotation.Import; | ||||
| import org.springframework.test.context.ActiveProfiles; | ||||
|  | ||||
| @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbAndRedisIntegrationTest.Application.class) | ||||
| @ActiveProfiles("integration-test") // 设置使用 application-integration-test 配置文件 | ||||
| public class BaseDbAndRedisIntegrationTest { | ||||
|  | ||||
|     @Import({ | ||||
|             // DB 配置类 | ||||
|             DynamicDataSourceAutoConfiguration.class, // Dynamic Datasource 配置类 | ||||
|             YudaoDataSourceAutoConfiguration.class, // 自己的 DB 配置类 | ||||
|             DataSourceAutoConfiguration.class, // Spring DB 自动配置类 | ||||
|             DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类 | ||||
|             // MyBatis 配置类 | ||||
|             YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis 配置类 | ||||
|             MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类 | ||||
|  | ||||
|             // Redis 配置类 | ||||
|             RedisAutoConfiguration.class, // Spring Redis 自动配置类 | ||||
|             YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类 | ||||
|             RedissonAutoConfiguration.class, // Redisson 自动高配置类 | ||||
|     }) | ||||
|     public static class Application { | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,23 @@ | ||||
| package cn.iocoder.yudao.module.system.test; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; | ||||
| import org.redisson.spring.starter.RedissonAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; | ||||
| import org.springframework.boot.test.context.SpringBootTest; | ||||
| import org.springframework.context.annotation.Import; | ||||
| import org.springframework.test.context.ActiveProfiles; | ||||
|  | ||||
| @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseRedisIntegrationTest.Application.class) | ||||
| @ActiveProfiles("integration-test") // 设置使用 application-integration-test 配置文件 | ||||
| public class BaseRedisIntegrationTest { | ||||
|  | ||||
|     @Import({ | ||||
|             // Redis 配置类 | ||||
|             RedisAutoConfiguration.class, // Spring Redis 自动配置类 | ||||
|             YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类 | ||||
|             RedissonAutoConfiguration.class, // Redisson 自动高配置类 | ||||
|     }) | ||||
|     public static class Application { | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,108 @@ | ||||
| spring: | ||||
|   main: | ||||
|     lazy-initialization: true # 开启懒加载,加快速度 | ||||
|     banner-mode: off # 单元测试,禁用 Banner | ||||
|  | ||||
| --- #################### 数据库相关配置 #################### | ||||
|  | ||||
| spring: | ||||
|   # 数据源配置项 | ||||
|   autoconfigure: | ||||
|     exclude: | ||||
|       - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 | ||||
|   datasource: | ||||
|     druid: # Druid 【监控】相关的全局配置 | ||||
|       web-stat-filter: | ||||
|         enabled: true | ||||
|       stat-view-servlet: | ||||
|         enabled: true | ||||
|         allow: # 设置白名单,不填则允许所有访问 | ||||
|         url-pattern: /druid/* | ||||
|         login-username: # 控制台管理用户名和密码 | ||||
|         login-password: | ||||
|       filter: | ||||
|         stat: | ||||
|           enabled: true | ||||
|           log-slow-sql: true # 慢 SQL 记录 | ||||
|           slow-sql-millis: 100 | ||||
|           merge-sql: true | ||||
|         wall: | ||||
|           config: | ||||
|             multi-statement-allow: true | ||||
|     dynamic: # 多数据源配置 | ||||
|       druid: # Druid 【连接池】相关的全局配置 | ||||
|         initial-size: 5 # 初始连接数 | ||||
|         min-idle: 10 # 最小连接池数量 | ||||
|         max-active: 20 # 最大连接池数量 | ||||
|         max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 | ||||
|         time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 | ||||
|         min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 | ||||
|         max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 | ||||
|         validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 | ||||
|         test-while-idle: true | ||||
|         test-on-borrow: false | ||||
|         test-on-return: false | ||||
|       primary: master | ||||
|       datasource: | ||||
|         master: | ||||
|           name: ruoyi-vue-pro | ||||
|           url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT | ||||
|           driver-class-name: com.mysql.jdbc.Driver | ||||
|           username: root | ||||
|           password: 123456 | ||||
|         slave: # 模拟从库,可根据自己需要修改 | ||||
|           name: ruoyi-vue-pro | ||||
|           url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT | ||||
|           driver-class-name: com.mysql.jdbc.Driver | ||||
|           username: root | ||||
|           password: 123456 | ||||
|  | ||||
|   # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 | ||||
|   redis: | ||||
|     host: 127.0.0.1 # 地址 | ||||
|     port: 6379 # 端口 | ||||
|     database: 0 # 数据库索引 | ||||
|  | ||||
| mybatis: | ||||
|   lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试 | ||||
|  | ||||
| --- #################### 定时任务相关配置 #################### | ||||
|  | ||||
| --- #################### 配置中心相关配置 #################### | ||||
|  | ||||
| --- #################### 服务保障相关配置 #################### | ||||
|  | ||||
| # Lock4j 配置项(单元测试,禁用 Lock4j) | ||||
|  | ||||
| # Resilience4j 配置项 | ||||
| resilience4j: | ||||
|   ratelimiter: | ||||
|     instances: | ||||
|       backendA: | ||||
|         limit-for-period: 1 # 每个周期内,允许的请求数。默认为 50 | ||||
|         limit-refresh-period: 60s # 每个周期的时长,单位:微秒。默认为 500 | ||||
|         timeout-duration: 1s # 被限流时,阻塞等待的时长,单位:微秒。默认为 5s | ||||
|         register-health-indicator: true # 是否注册到健康监测 | ||||
|  | ||||
| --- #################### 监控相关配置 #################### | ||||
|  | ||||
| --- #################### 芋道相关配置 #################### | ||||
|  | ||||
| # 芋道配置项,设置当前项目所有自定义的配置 | ||||
| yudao: | ||||
|   security: | ||||
|     token-header: Authorization | ||||
|     token-secret: abcdefghijklmnopqrstuvwxyz | ||||
|     token-timeout: 1d | ||||
|     session-timeout: 30m | ||||
|     mock-enable: true | ||||
|     mock-secret: test | ||||
|   swagger: | ||||
|     enable: false # 单元测试,禁用 Swagger | ||||
|   file: | ||||
|     base-path: http://127.0.0.1:${server.port}/${yudao.web.api-prefix}/file/get/ | ||||
|   xss: | ||||
|     enable: false | ||||
|     exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 | ||||
|       - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 | ||||
|       - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV