puzhibing
2026-04-10 ed838e62602c0a63a64ff4bd144a0d16cc9a7cf8
xp-robotaxi-automatic-pilot-boot/src/test/java/com/xiaopeng/automaticPilot/controller/KafkaTestControllerTest.java
@@ -1,235 +0,0 @@
package com.xiaopeng.automaticPilot.controller;
import com.xiaopeng.api.feignClient.map.XpMapClient;
import com.xiaopeng.api.feignClient.operation.ReassignOrderClient;
import com.xiaopeng.api.feignClient.operation.XpCruisePlanClient;
import com.xiaopeng.api.feignClient.order.XpCruiseOrderClient;
import com.xiaopeng.api.feignClient.order.XpOrderClient;
import com.xiaopeng.api.feignClient.pushMessage.XpPushMessageClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.UserVehicleClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
import com.xiaopeng.api.model.order.XpOrder;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
import com.xiaopeng.api.vo.operation.RouteVo;
import com.xiaopeng.automaticPilot.service.KafkaConsumerService;
import com.xiaopeng.automaticPilot.util.XPUUtil;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.redis.service.RedisService;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.redis.core.GeoOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.test.util.ReflectionTestUtils;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import static org.mockito.Mockito.*;
/**
 * KafkaTestController 单元测试
 */
@Slf4j
@DisplayName("Kafka测试控制器单元测试")
@ExtendWith(MockitoExtension.class)
public class KafkaTestControllerTest {
    @Mock
    private XpVehicleClient xpVehicleClient;
    @Mock
    private XpMapClient xpMapClient;
    @Mock
    private XpOrderClient xpOrderClient;
    @Mock
    private MongoTemplate mongoTemplate;
    @Mock
    private XPUUtil xpuUtil;
    @Mock
    private RedisTemplate redisTemplate;
    @Mock
    private XpPushMessageClient xpPushMessageClient;
    @Mock
    private ReassignOrderClient reassignOrderClient;
    @Mock
    private UserVehicleClient userVehicleClient;
    @Mock
    private XpCruiseOrderClient xpCruiseOrderClient;
    @Mock
    private RedisService redisService;
    @Mock
    private XpCruisePlanClient xpCruisePlanClient;
    @Mock
    private ValueOperations valueOperations;
    @Mock
    private GeoOperations geoOperations;
    @InjectMocks
    private KafkaConsumerService kafkaConsumerService;
    @Spy
    @InjectMocks
    private KafkaTestController kafkaTestController;
    @Mock
    private R<XpVehicle> mockResponseResult;
    @Mock
    private R<XpOrder> mockOrderResponseResult;
    // 模拟的XpVehicle对象
    private XpVehicle mockXpVehicle;
    @BeforeEach
    public void setUp() {
        // 将包含所有 mock 依赖的 kafkaConsumerService 注入到 kafkaTestController
        ReflectionTestUtils.setField(kafkaTestController, "kafkaConsumerService", kafkaConsumerService);
    }
    /**
     * 从本地文件读取JSON内容
     *
     * @param filePath 文件路径
     * @return JSON字符串
     * @throws IOException 如果文件读取失败
     */
    private String readJsonFile(String filePath) throws IOException {
        return new String(Files.readAllBytes(Paths.get(filePath)), StandardCharsets.UTF_8);
    }
    @Test
    @DisplayName("测试XPU发生系统运行状态")
    public void testXpuSendSystemRuntimeStatus() throws IOException {
        // 从本地文件读取测试数据
        String testMessage = readJsonFile("src/test/resources/jsondemo/common/system_runtime_status.json");
        mockXpVehicle = new XpVehicle();
        mockXpVehicle.setXpuId("xpu-001");
        mockXpVehicle.setVehicleVin("test-vin");
        when(mockResponseResult.getData()).thenReturn(mockXpVehicle);
        when(xpVehicleClient.findByVehicleXpuId(anyString())).thenReturn(mockResponseResult);
        // mock redisTemplate 的 geo 和 value 操作,避免空指针
        when(redisTemplate.opsForGeo()).thenReturn(geoOperations);
        when(redisTemplate.opsForValue()).thenReturn(valueOperations);
        // 执行测试
        kafkaTestController.topicProdRobotaxiXpuHigh(testMessage);
    }
    @Test
    @DisplayName("测试XPU发送导航请求")
    public void testXPUSendNavigationRequest() throws IOException {
        // 从本地文件读取测试数据
        String testMessage = readJsonFile("src/test/resources/jsondemo/cloud/navigation_requset.json");
        XpOrder mockOrder = new XpOrder();
        mockOrder.setId(1881347710714060802L);
        mockOrder.setVehicleId(1L);
        when(mockOrderResponseResult.getCode()).thenReturn(200);
        when(mockOrderResponseResult.getData()).thenReturn(mockOrder);
        when(xpOrderClient.queryOrderById(anyLong())).thenReturn(mockOrderResponseResult);
        mockXpVehicle = new XpVehicle();
        mockXpVehicle.setXpuId("xpu-001");
        mockXpVehicle.setVehicleVin("test-vin");
        when(mockResponseResult.getData()).thenReturn(mockXpVehicle);
        when(xpVehicleClient.queryById(anyLong())).thenReturn(mockResponseResult);
        // mock mongoTemplate.findOne 返回 VehiclePosition,避免 "车辆位置信息不存在" 异常
        VehiclePosition mockVehiclePosition = new VehiclePosition();
        mockVehiclePosition.setVin("test-vin");
        mockVehiclePosition.setPoint(new GeoJsonPoint(113.3245, 23.1235));
        when(mongoTemplate.findOne(any(Query.class), eq(VehiclePosition.class))).thenReturn(mockVehiclePosition);
        RouteVo mockRouteVo = new RouteVo();
        mockRouteVo.setRouteID("test-route-id");
        when(xpMapClient.getOrderDistanceAndDuration(any())).thenReturn(R.ok(mockRouteVo));
        when(xpMapClient.queryRouted(any())).thenReturn(R.ok("test-routed-data"));
        when(redisTemplate.opsForValue()).thenReturn(valueOperations);
        // 执行测试
        kafkaTestController.topicProdRobotaxiXpuHigh(testMessage);
    }
    @Test
    @DisplayName("测试XPU发送订单状态请求")
    public void testXPUSendOrderStatusRequest() throws IOException {
        // 从本地文件读取测试数据
        String testMessage = readJsonFile("src/test/resources/jsondemo/cloud/order_status_info_event.json");
        // 执行测试
        kafkaTestController.topicProdRobotaxiXpuHigh(testMessage);
    }
    //当前没有处理
    @Test
    @DisplayName("测试XPU发送导航信息更新")
    public void testXPUSendNavigationInfoUpdate() throws IOException {
        // 从本地文件读取测试数据
        String testMessage = readJsonFile("src/test/resources/jsondemo/cloud/navigation_info_update_event.json");
        // 执行测试
        kafkaTestController.topicProdRobotaxiXpuHigh(testMessage);
    }
    @Test
    @DisplayName("测试XPU发送偏航信息")
    public void testXPUSendNavigationDeviationEvent() throws IOException {
        // 从本地文件读取测试数据
        String testMessage = readJsonFile("src/test/resources/jsondemo/cloud/navi_deviation_event.json");
        XpOrder mockOrder = new XpOrder();
        mockOrder.setId(1881347710714060802L);
        mockOrder.setStatus(3);
        mockOrder.setVehicleId(1L);
        when(mockOrderResponseResult.getCode()).thenReturn(200);
        when(mockOrderResponseResult.getData()).thenReturn(mockOrder);
        when(xpOrderClient.queryOrderById(anyLong())).thenReturn(mockOrderResponseResult);
        mockXpVehicle = new XpVehicle();
        mockXpVehicle.setXpuId("xpu-001");
        mockXpVehicle.setVehicleVin("test-vin");
        when(mockResponseResult.getData()).thenReturn(mockXpVehicle);
        when(xpVehicleClient.queryById(anyLong())).thenReturn(mockResponseResult);
        RouteVo mockRouteVo = new RouteVo();
        mockRouteVo.setRouteID("test-route-id");
        when(xpMapClient.getOrderDistanceAndDuration(any())).thenReturn(R.ok(mockRouteVo));
        when(xpMapClient.queryRouted(any())).thenReturn(R.ok("test-routed-data"));
        when(redisTemplate.opsForValue()).thenReturn(valueOperations);
        // 执行测试
        kafkaTestController.topicProdRobotaxiXpuHigh(testMessage);
    }
}