yeg
6 天以前 a04222c873e5e55f48c8d33b5c0bc46fa524ac8d
ruoyi-admin/src/test/java/com/battery/business/service/impl/DeviceAdapterServiceImplTest.java
@@ -6,6 +6,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -21,6 +22,7 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@@ -92,6 +94,49 @@
        assertEquals(1, rows);
        verify(registry).synchronize(any());
    }
    /** 装配失败(例如缺少口令环境变量)时不能把状态改成"已启用",免得留下库里启用、运行时没实例的假状态。 */
    @Test
    void failedEnableKeepsAdapterDisabledAndSurfacesTheReason()
    {
        adapter.setStatus("1");
        when(adapterMapper.selectDeviceAdapterById(7L)).thenReturn(adapter);
        org.mockito.Mockito.doThrow(new DeviceAdapterException("缺少厂商库连接口令:请设置环境变量 X"))
                .when(registry).synchronize(any());
        DeviceAdapterException exception = assertThrows(DeviceAdapterException.class,
                () -> service.changeStatus(7L, true, "admin"));
        assertTrue(exception.getMessage().contains("缺少厂商库连接口令"));
        verify(adapterMapper, never()).updateDeviceAdapterStatus(any(), any(), any());
    }
    /** 单行配置有问题不得拦住后端启动:写日志并把失败落到该行,使"忘了放凭据"在启动后立刻可见。 */
    @Test
    void startupRestoreSurvivesOneBrokenAdapterRow()
    {
        TDeviceAdapter vendor = new TDeviceAdapter();
        vendor.setAdapterId(9L);
        vendor.setAdapterCode("neware76");
        vendor.setAdapterName("新威 7.6 那台");
        vendor.setAdapterType("NEWARE_MYSQL");
        vendor.setHost("26.70.208.249");
        vendor.setPort(3306);
        vendor.setPollIntervalMs(60000);
        vendor.setTimezoneId("Asia/Hong_Kong");
        vendor.setStatus("0");
        vendor.setCapabilities("{\"discovery\":true,\"realtimeObservation\":true,\"historyDownload\":true,\"control\":false}");
        when(adapterMapper.selectEnabledDeviceAdapters()).thenReturn(List.of(vendor));
        org.mockito.Mockito.doThrow(new DeviceAdapterException("缺少厂商库连接口令:config/vendor-credentials.properties 中没有键 X"))
                .when(registry).synchronize(any());
        service.synchronizeEnabledAdapters();
        verify(registry).synchronize(any());
        ArgumentCaptor<String> message = ArgumentCaptor.forClass(String.class);
        verify(adapterMapper).updateDiscoveryFailure(eq(9L), any(), message.capture());
        assertTrue(message.getValue().contains("缺少厂商库连接口令"));
    }
    @Test
@@ -167,7 +212,7 @@
        var channel = candidateStore.snapshot(Instant.now()).cabinets().get(0).channels().get(0);
        assertEquals(DeviceWorkStatus.WORKING, channel.workStatus());
        verify(detectionCabinetMapper).updateRegisteredChannelObservation(eq("lab-bts"), eq(22), eq(1), eq(2),
                eq(3), eq("ONLINE"), eq("WORKING"), any(), eq(true));
                eq(3), isNull(), eq("ONLINE"), eq("WORKING"), any(), eq(true));
        verify(detectionCabinetMapper).updateRegisteredCabinetObservation(eq("lab-bts"), eq(22), eq(1),
                eq("ONLINE"), any(), eq(true));
    }
@@ -188,7 +233,7 @@
        assertEquals(false, cabinet.online());
        assertTrue(cabinet.channels().stream().noneMatch(channel -> channel.online()));
        verify(detectionCabinetMapper).updateRegisteredChannelObservation(eq("lab-bts"), eq(22), eq(1), eq(1),
                eq(1), eq("OFFLINE"), eq("UNKNOWN"), any(), eq(false));
                eq(1), isNull(), eq("OFFLINE"), eq("UNKNOWN"), any(), eq(false));
        verify(detectionCabinetMapper).updateRegisteredCabinetObservation(eq("lab-bts"), eq(22), eq(1),
                eq("OFFLINE"), any(), eq(false));
    }
@@ -205,7 +250,7 @@
        service.discover(7L);
        verify(detectionCabinetMapper).updateRegisteredChannelObservation(eq("lab-bts"), eq(22), eq(1), eq(1),
                eq(1), eq("ONLINE"), eq("UNKNOWN"), any(), eq(false));
                eq(1), isNull(), eq("ONLINE"), eq("UNKNOWN"), any(), eq(false));
        verify(detectionCabinetMapper).updateRegisteredCabinetObservation(eq("lab-bts"), eq(22), eq(1),
                eq("ONLINE"), any(), eq(false));
    }